/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * UpdateDatabase request structure.
 * @class
 */
class UpdateDatabaseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The database name to be modified
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Modify the operation type, such as SET_QUOTA, RENAME, SET_REPLICA_QUOTA, and SET_PROPERTIES. Modify the operation type, such as SET_QUOTA, RENAME, SET_REPLICA_QUOTA, and SET_PROPERTIES.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * InstanceId
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Quota value, which is used to set the quota of data volume or replicas.
         * @type {string || null}
         */
        this.Quota = null;

        /**
         * New database name, used for renaming operation.
         * @type {string || null}
         */
        this.NewDbName = null;

        /**
         * Attribute key-value pair to be set
         * @type {Array.<PropertiesMap> || null}
         */
        this.Properties = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * The name of the catalog, if left unspecified, defaults to "internal".
         * @type {string || null}
         */
        this.CatalogName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Quota = 'Quota' in params ? params.Quota : null;
        this.NewDbName = 'NewDbName' in params ? params.NewDbName : null;

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new PropertiesMap();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;

    }
}

/**
 * DescribeInstanceUsedSubnets response structure.
 * @class
 */
class DescribeInstanceUsedSubnetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC information used by the cluster
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet information used by the cluster
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.UsedSubnets = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.UsedSubnets = 'UsedSubnets' in params ? params.UsedSubnets : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceNodes response structure.
 * @class
 */
class DescribeInstanceNodesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Total number of instance nodes
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceNode> || null}
         */
        this.InstanceNodesList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.InstanceNodesList) {
            this.InstanceNodesList = new Array();
            for (let z in params.InstanceNodesList) {
                let obj = new InstanceNode();
                obj.deserialize(params.InstanceNodesList[z]);
                this.InstanceNodesList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeClusterConfigsHistory response structure.
 * @class
 */
class DescribeClusterConfigsHistoryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of instances
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Modification history of the configuration file
         * @type {Array.<ClusterConfigsHistory> || null}
         */
        this.ClusterConfHistory = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ClusterConfHistory) {
            this.ClusterConfHistory = new Array();
            for (let z in params.ClusterConfHistory) {
                let obj = new ClusterConfigsHistory();
                obj.deserialize(params.ClusterConfHistory[z]);
                this.ClusterConfHistory.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceOperations request structure.
 * @class
 */
class DescribeInstanceOperationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * 
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * 
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * 
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * 
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * DescribeClusterConfigs response structure.
 * @class
 */
class DescribeClusterConfigsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Return information about the instance's configuration file.
         * @type {Array.<ClusterConfigsInfoFromEMR> || null}
         */
        this.ClusterConfList = null;

        /**
         * Return the current kernel version. If it does not exist, a null character string is returned.
         * @type {string || null}
         */
        this.BuildVersion = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ClusterConfList) {
            this.ClusterConfList = new Array();
            for (let z in params.ClusterConfList) {
                let obj = new ClusterConfigsInfoFromEMR();
                obj.deserialize(params.ClusterConfList[z]);
                this.ClusterConfList.push(obj);
            }
        }
        this.BuildVersion = 'BuildVersion' in params ? params.BuildVersion : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ScaleOutInstance response structure.
 * @class
 */
class ScaleOutInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process ID
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNodeStatus response structure.
 * @class
 */
class ModifyNodeStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process related information
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserPrivilegesV3 response structure.
 * @class
 */
class ModifyUserPrivilegesV3Response extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message; null means no error.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateTableSchema response structure.
 * @class
 */
class UpdateTableSchemaResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Is it successful
         * @type {boolean || null}
         */
        this.Success = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.Success = 'Success' in params ? params.Success : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserPrivilegesV3 request structure.
 * @class
 */
class ModifyUserPrivilegesV3Request extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Username
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * User permission
         * @type {UpdateUserPrivileges || null}
         */
        this.UserPrivileges = null;

        /**
         * The IP address of the user link	
         * @type {string || null}
         */
        this.WhiteHost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;

        if (params.UserPrivileges) {
            let obj = new UpdateUserPrivileges();
            obj.deserialize(params.UserPrivileges)
            this.UserPrivileges = obj;
        }
        this.WhiteHost = 'WhiteHost' in params ? params.WhiteHost : null;

    }
}

/**
 * DestroyInstance request structure.
 * @class
 */
class DestroyInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * User information bound to the resource group requires username and host information for authorization.
 * @class
 */
class BindUser extends  AbstractModel {
    constructor(){
        super();

        /**
         * Username
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Host information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Host = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.Host = 'Host' in params ? params.Host : null;

    }
}

/**
 * CancelBackupJob request structure.
 * @class
 */
class CancelBackupJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Backup instance ID to be canceled
         * @type {number || null}
         */
        this.BackUpJobId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.BackUpJobId = 'BackUpJobId' in params ? params.BackUpJobId : null;

    }
}

/**
 * ModifyWorkloadGroup request structure.
 * @class
 */
class ModifyWorkloadGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Modified resource group information
         * @type {WorkloadGroupConfig || null}
         */
        this.WorkloadGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.WorkloadGroup) {
            let obj = new WorkloadGroupConfig();
            obj.deserialize(params.WorkloadGroup)
            this.WorkloadGroup = obj;
        }

    }
}

/**
 * Resource group information bound to the user
 * @class
 */
class UserWorkloadGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * test
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * normal
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WorkloadGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.WorkloadGroupName = 'WorkloadGroupName' in params ? params.WorkloadGroupName : null;

    }
}

/**
 * DescribeSlowQueryRecordsDownload response structure.
 * @class
 */
class DescribeSlowQueryRecordsDownloadResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * cos address
         * @type {string || null}
         */
        this.CosUrl = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosUrl = 'CosUrl' in params ? params.CosUrl : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteWorkloadGroup request structure.
 * @class
 */
class DeleteWorkloadGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Resource group name to be deleted
         * @type {string || null}
         */
        this.WorkloadGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.WorkloadGroupName = 'WorkloadGroupName' in params ? params.WorkloadGroupName : null;

    }
}

/**
 * Resource group configuration
 * @class
 */
class WorkloadGroupConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource group name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WorkloadGroupName = null;

        /**
         * CPU weight
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CpuShare = null;

        /**
         * Memory limit. The sum of memory limit values of all resource groups should be less than or equal to 100.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MemoryLimit = null;

        /**
         * Whether to allow over-allocation
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.EnableMemoryOverCommit = null;

        /**
         * CPU hard limit
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CpuHardLimit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkloadGroupName = 'WorkloadGroupName' in params ? params.WorkloadGroupName : null;
        this.CpuShare = 'CpuShare' in params ? params.CpuShare : null;
        this.MemoryLimit = 'MemoryLimit' in params ? params.MemoryLimit : null;
        this.EnableMemoryOverCommit = 'EnableMemoryOverCommit' in params ? params.EnableMemoryOverCommit : null;
        this.CpuHardLimit = 'CpuHardLimit' in params ? params.CpuHardLimit : null;

    }
}

/**
 * DescribeInstanceOperationHistory response structure.
 * @class
 */
class DescribeInstanceOperationHistoryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of operation records
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Specific data of operation records
         * @type {Array.<InstanceOperation> || null}
         */
        this.Operations = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Operations) {
            this.Operations = new Array();
            for (let z in params.Operations) {
                let obj = new InstanceOperation();
                obj.deserialize(params.Operations[z]);
                this.Operations.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * InsertDatasToTable request structure.
 * @class
 */
class InsertDatasToTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Table name
         * @type {string || null}
         */
        this.Table = null;

        /**
         * Array of column names
         * @type {Array.<string> || null}
         */
        this.Columns = null;

        /**
         * Data line
         * @type {Array.<Rows> || null}
         */
        this.Rows = null;

        /**
         * Array of column types

         * @type {Array.<string> || null}
         */
        this.Types = null;

        /**
         * InstanceId
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Whether to use the strict mode
         * @type {boolean || null}
         */
        this.Strict = null;

        /**
         * Maximum filtration ratio, ranging from 0 to 1.0
         * @type {number || null}
         */
        this.MaxFilterRatio = null;

        /**
         * Tags for inserting data
         * @type {string || null}
         */
        this.Label = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Catalog name, defaults to 'internal' if not specified.
         * @type {string || null}
         */
        this.CatalogName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Database = 'Database' in params ? params.Database : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.Columns = 'Columns' in params ? params.Columns : null;

        if (params.Rows) {
            this.Rows = new Array();
            for (let z in params.Rows) {
                let obj = new Rows();
                obj.deserialize(params.Rows[z]);
                this.Rows.push(obj);
            }
        }
        this.Types = 'Types' in params ? params.Types : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Strict = 'Strict' in params ? params.Strict : null;
        this.MaxFilterRatio = 'MaxFilterRatio' in params ? params.MaxFilterRatio : null;
        this.Label = 'Label' in params ? params.Label : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;

    }
}

/**
 * Detail field of the Instance table
 * @class
 */
class InstanceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the alarm policy is available	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.EnableAlarmStrategy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnableAlarmStrategy = 'EnableAlarmStrategy' in params ? params.EnableAlarmStrategy : null;

    }
}

/**
 * ModifyDatabaseTableAccess request structure.
 * @class
 */
class ModifyDatabaseTableAccessRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Permission list
         * @type {Array.<string> || null}
         */
        this.Privileges = null;

        /**
         * Operation type: GRANT or REVOKE
         * @type {string || null}
         */
        this.GrantOrRevoke = null;

        /**
         * InstanceId
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Table name. If it is null, it indicates that the entire database is authorized.
         * @type {string || null}
         */
        this.Table = null;

        /**
         * Role name, if authorized to the role
         * @type {string || null}
         */
        this.Role = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Catalog name, defaults to internal if not specified.
         * @type {string || null}
         */
        this.CatalogName = null;

        /**
         * Machine Group, defaults to % if not specified.
         * @type {string || null}
         */
        this.WhiteHost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Database = 'Database' in params ? params.Database : null;
        this.Privileges = 'Privileges' in params ? params.Privileges : null;
        this.GrantOrRevoke = 'GrantOrRevoke' in params ? params.GrantOrRevoke : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.Role = 'Role' in params ? params.Role : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;
        this.WhiteHost = 'WhiteHost' in params ? params.WhiteHost : null;

    }
}

/**
 * DescribeInstances response structure.
 * @class
 */
class DescribeInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total Number of Instances
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Quantities of instances array
         * @type {Array.<InstanceInfo> || null}
         */
        this.InstancesList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.InstancesList) {
            this.InstancesList = new Array();
            for (let z in params.InstancesList) {
                let obj = new InstanceInfo();
                obj.deserialize(params.InstancesList[z]);
                this.InstancesList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The customer provides cos authentication information.
 * @class
 */
class CosSourceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID in cos authentication
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SecretId = null;

        /**
         * Key in cos authentication
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * Path in cos authentication
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CosPath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecretId = 'SecretId' in params ? params.SecretId : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.CosPath = 'CosPath' in params ? params.CosPath : null;

    }
}

/**
 * ReduceInstance response structure.
 * @class
 */
class ReduceInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process ID
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCoolDownPolicy request structure.
 * @class
 */
class ModifyCoolDownPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Policy name
         * @type {string || null}
         */
        this.PolicyName = null;

        /**
         * cooldown_ttl
         * @type {string || null}
         */
        this.CoolDownTtl = null;

        /**
         * cooldown_datetime
         * @type {string || null}
         */
        this.CoolDownDatetime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PolicyName = 'PolicyName' in params ? params.PolicyName : null;
        this.CoolDownTtl = 'CoolDownTtl' in params ? params.CoolDownTtl : null;
        this.CoolDownDatetime = 'CoolDownDatetime' in params ? params.CoolDownDatetime : null;

    }
}

/**
 * DescribeBackUpTaskDetail request structure.
 * @class
 */
class DescribeBackUpTaskDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.BackUpJobId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.BackUpJobId = 'BackUpJobId' in params ? params.BackUpJobId : null;

    }
}

/**
 * RecoverBackUpJob request structure.
 * @class
 */
class RecoverBackUpJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.BackUpJobId = null;

        /**
         * Number of new table replicas recovered
         * @type {number || null}
         */
        this.ReplicationNum = null;

        /**
         * Whether to retain the configuration in the source table during recovery. 1 indicates that the configurations in the source table are retained.
         * @type {number || null}
         */
        this.ReserveSourceConfig = null;

        /**
         * 0: default; 1: cos recovery
         * @type {number || null}
         */
        this.RecoverType = null;

        /**
         * CosSourceInfo object
         * @type {CosSourceInfo || null}
         */
        this.CosSourceInfo = null;

        /**
         * 0: default; 1: regular execution
         * @type {number || null}
         */
        this.ScheduleType = null;

        /**
         * YY-MM-DD Hour : Minute : Second
         * @type {string || null}
         */
        this.NextTime = null;

        /**
         * Scheduling name
         * @type {string || null}
         */
        this.ScheduleName = null;

        /**
         * create update
         * @type {string || null}
         */
        this.OperationType = null;

        /**
         * Recovery granularity: All, Database, and Table
         * @type {string || null}
         */
        this.RecoverScope = null;

        /**
         * Recover database: If you back up by database, this field is required. Use commas to separate databases.
         * @type {string || null}
         */
        this.RecoverDatabase = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.BackUpJobId = 'BackUpJobId' in params ? params.BackUpJobId : null;
        this.ReplicationNum = 'ReplicationNum' in params ? params.ReplicationNum : null;
        this.ReserveSourceConfig = 'ReserveSourceConfig' in params ? params.ReserveSourceConfig : null;
        this.RecoverType = 'RecoverType' in params ? params.RecoverType : null;

        if (params.CosSourceInfo) {
            let obj = new CosSourceInfo();
            obj.deserialize(params.CosSourceInfo)
            this.CosSourceInfo = obj;
        }
        this.ScheduleType = 'ScheduleType' in params ? params.ScheduleType : null;
        this.NextTime = 'NextTime' in params ? params.NextTime : null;
        this.ScheduleName = 'ScheduleName' in params ? params.ScheduleName : null;
        this.OperationType = 'OperationType' in params ? params.OperationType : null;
        this.RecoverScope = 'RecoverScope' in params ? params.RecoverScope : null;
        this.RecoverDatabase = 'RecoverDatabase' in params ? params.RecoverDatabase : null;

    }
}

/**
 * Disk specification description
 * @class
 */
class DiskSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Disk type, such as CLOUD_SSD and LOCAL_SSD
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Disk type description, such as cloud SSD and local SSD
         * @type {string || null}
         */
        this.DiskDesc = null;

        /**
         * Minimum disk size, in GB
         * @type {number || null}
         */
        this.MinDiskSize = null;

        /**
         * Maximum disk size, in GB
         * @type {number || null}
         */
        this.MaxDiskSize = null;

        /**
         * Number of disks
         * @type {number || null}
         */
        this.DiskCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskDesc = 'DiskDesc' in params ? params.DiskDesc : null;
        this.MinDiskSize = 'MinDiskSize' in params ? params.MinDiskSize : null;
        this.MaxDiskSize = 'MaxDiskSize' in params ? params.MaxDiskSize : null;
        this.DiskCount = 'DiskCount' in params ? params.DiskCount : null;

    }
}

/**
 * DescribeInstanceOperations response structure.
 * @class
 */
class DescribeInstanceOperationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceOperation> || null}
         */
        this.Operations = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Operations) {
            this.Operations = new Array();
            for (let z in params.Operations) {
                let obj = new InstanceOperation();
                obj.deserialize(params.Operations[z]);
                this.Operations.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserBindWorkloadGroup response structure.
 * @class
 */
class DescribeUserBindWorkloadGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource group information bound to the user
         * @type {Array.<UserWorkloadGroup> || null}
         */
        this.UserBindInfos = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserBindInfos) {
            this.UserBindInfos = new Array();
            for (let z in params.UserBindInfos) {
                let obj = new UserWorkloadGroup();
                obj.deserialize(params.UserBindInfos[z]);
                this.UserBindInfos.push(obj);
            }
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DDL information for creating a table
 * @class
 */
class CreateTablesDDL extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * DDL information of the table

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TablesDDL> || null}
         */
        this.TablesDDLs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbName = 'DbName' in params ? params.DbName : null;

        if (params.TablesDDLs) {
            this.TablesDDLs = new Array();
            for (let z in params.TablesDDLs) {
                let obj = new TablesDDL();
                obj.deserialize(params.TablesDDLs[z]);
                this.TablesDDLs.push(obj);
            }
        }

    }
}

/**
 * ScaleOutInstance request structure.
 * @class
 */
class ScaleOutInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Role (MATER/CORE), MASTER corresponds to FE, CORE corresponds to BE.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Number of nodes
         * @type {number || null}
         */
        this.NodeCount = null;

        /**
         * Cluster high availability type after scaled out: 0 indicates non-high availability, 1 indicates read high availability, and 2 indicates read-write high availability.
         * @type {number || null}
         */
        this.HaType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.NodeCount = 'NodeCount' in params ? params.NodeCount : null;
        this.HaType = 'HaType' in params ? params.HaType : null;

    }
}

/**
 * Update user permission structure
 * @class
 */
class UpdateUserPrivileges extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to set catalog permission
         * @type {boolean || null}
         */
        this.IsSetGlobalCatalog = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsSetGlobalCatalog = 'IsSetGlobalCatalog' in params ? params.IsSetGlobalCatalog : null;

    }
}

/**
 * ModifyClusterConfigs request structure.
 * @class
 */
class ModifyClusterConfigsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID, for example, cdwch-xxxx
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Configuration file modification information
         * @type {Array.<ConfigSubmitContext> || null}
         */
        this.ModifyConfContext = null;

        /**
         * Reason for modification
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.ModifyConfContext) {
            this.ModifyConfContext = new Array();
            for (let z in params.ModifyConfContext) {
                let obj = new ConfigSubmitContext();
                obj.deserialize(params.ModifyConfContext[z]);
                this.ModifyConfContext.push(obj);
            }
        }
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * DescribeQueryAnalyse request structure.
 * @class
 */
class DescribeQueryAnalyseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Start time of operation period
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time of operation period.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * SQL fragments (fuzzy query supported)
         * @type {string || null}
         */
        this.SQLFragment = null;

        /**
         * Catalog filter condition
         * @type {string || null}
         */
        this.CatalogFilter = null;

        /**
         * Database name filter condition
         * @type {string || null}
         */
        this.DatabaseFilter = null;

        /**
         * SQL type filter criteria
         * @type {string || null}
         */
        this.SQLTypeFilter = null;

        /**
         * Sorting field
         * @type {string || null}
         */
        this.SortField = null;

        /**
         * Sorting order: asc (ascending) or desc (descending)
         * @type {string || null}
         */
        this.SortOrder = null;

        /**
         * Minimum query execution time, in milliseconds.
         * @type {number || null}
         */
        this.QueryTime = null;

        /**
         * Page number, defaults to 1.
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Number of records per page, defaults to 10.
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.SQLFragment = 'SQLFragment' in params ? params.SQLFragment : null;
        this.CatalogFilter = 'CatalogFilter' in params ? params.CatalogFilter : null;
        this.DatabaseFilter = 'DatabaseFilter' in params ? params.DatabaseFilter : null;
        this.SQLTypeFilter = 'SQLTypeFilter' in params ? params.SQLTypeFilter : null;
        this.SortField = 'SortField' in params ? params.SortField : null;
        this.SortOrder = 'SortOrder' in params ? params.SortOrder : null;
        this.QueryTime = 'QueryTime' in params ? params.QueryTime : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * DescribeInstanceState request structure.
 * @class
 */
class DescribeInstanceStateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance name
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Network information
 * @class
 */
class NetworkInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Subnet ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The number of available IP addresses in the current subnet
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SubnetIpNum = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.SubnetIpNum = 'SubnetIpNum' in params ? params.SubnetIpNum : null;

    }
}

/**
 * Availability zone description
 * @class
 */
class ZoneInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone name, such as ap-guangzhou-1
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Availability zone description, such as Guangzhou region 1
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Unique tag of the availability zone
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Encryptid
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Encrypt = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Desc = 'Desc' in params ? params.Desc : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.Encrypt = 'Encrypt' in params ? params.Encrypt : null;

    }
}

/**
 * DescribeAreaRegion response structure.
 * @class
 */
class DescribeAreaRegionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region list
         * @type {Array.<RegionAreaInfo> || null}
         */
        this.Items = null;

        /**
         * Front-end rule description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<FrontEndRule> || null}
         */
        this.FrontEndRules = null;

        /**
         * Return available allowlist names
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.AvailableWhiteListNames = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Items) {
            this.Items = new Array();
            for (let z in params.Items) {
                let obj = new RegionAreaInfo();
                obj.deserialize(params.Items[z]);
                this.Items.push(obj);
            }
        }

        if (params.FrontEndRules) {
            this.FrontEndRules = new Array();
            for (let z in params.FrontEndRules) {
                let obj = new FrontEndRule();
                obj.deserialize(params.FrontEndRules[z]);
                this.FrontEndRules.push(obj);
            }
        }
        this.AvailableWhiteListNames = 'AvailableWhiteListNames' in params ? params.AvailableWhiteListNames : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteBackUpData request structure.
 * @class
 */
class DeleteBackUpDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.BackUpJobId = null;

        /**
         * Whether to delete all instances
         * @type {boolean || null}
         */
        this.IsDeleteAll = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.BackUpJobId = 'BackUpJobId' in params ? params.BackUpJobId : null;
        this.IsDeleteAll = 'IsDeleteAll' in params ? params.IsDeleteAll : null;

    }
}

/**
 * ExecuteParametrizedQuery response structure.
 * @class
 */
class ExecuteParametrizedQueryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total records of query results
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Field name array of query results
         * @type {Array.<string> || null}
         */
        this.Fields = null;

        /**
         * Field type array of query results
         * @type {Array.<string> || null}
         */
        this.FieldTypes = null;

        /**
         * Returned data record array. Each element is an array, containing the value of the corresponding field.
         * @type {Array.<Rows> || null}
         */
        this.Rows = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.Fields = 'Fields' in params ? params.Fields : null;
        this.FieldTypes = 'FieldTypes' in params ? params.FieldTypes : null;

        if (params.Rows) {
            this.Rows = new Array();
            for (let z in params.Rows) {
                let obj = new Rows();
                obj.deserialize(params.Rows[z]);
                this.Rows.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDatabase request structure.
 * @class
 */
class CreateDatabaseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Name of database to be created
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Database attributes. For keys with the same attributes, the priority of the table attribute is higher than that of the database attribute.
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }

    }
}

/**
 * Return the configuration file content (key-value)
 * @class
 */
class ConfigKeyValue extends  AbstractModel {
    constructor(){
        super();

        /**
         * key
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.KeyName = null;

        /**
         * Value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Notes
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * 1 indicates read-only, 2 indicates editable but undeletable, and 3 indicates deletable.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Display = null;

        /**
         * 0 means not supported, and 1 means hot update is supported.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SupportHotUpdate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.KeyName = 'KeyName' in params ? params.KeyName : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.Display = 'Display' in params ? params.Display : null;
        this.SupportHotUpdate = 'SupportHotUpdate' in params ? params.SupportHotUpdate : null;

    }
}

/**
 * Tag description
 * @class
 */
class Tag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value
         * @type {string || null}
         */
        this.TagValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;

    }
}

/**
 * ResizeDisk response structure.
 * @class
 */
class ResizeDiskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Process ID
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * OpenCoolDown request structure.
 * @class
 */
class OpenCoolDownRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeCoolDownTableData request structure.
 * @class
 */
class DescribeCoolDownTableDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Database name
         * @type {string || null}
         */
        this.DatabaseName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;

    }
}

/**
 * CheckCoolDownWorkingVariableConfigCorrect response structure.
 * @class
 */
class CheckCoolDownWorkingVariableConfigCorrectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstance response structure.
 * @class
 */
class ModifyInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSlowQueryRecordsDownload request structure.
 * @class
 */
class DescribeSlowQueryRecordsDownloadRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Slow log time
         * @type {number || null}
         */
        this.QueryDurationMs = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.DurationMs = null;

        /**
         * Query SQL
         * @type {string || null}
         */
        this.Sql = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.ReadRows = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.ResultBytes = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.MemoryUsage = null;

        /**
         * IsQuery condition
         * @type {number || null}
         */
        this.IsQuery = null;

        /**
         * Database name
         * @type {Array.<string> || null}
         */
        this.DbName = null;

        /**
         * catalog name
         * @type {Array.<string> || null}
         */
        this.CatalogName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.QueryDurationMs = 'QueryDurationMs' in params ? params.QueryDurationMs : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.DurationMs = 'DurationMs' in params ? params.DurationMs : null;
        this.Sql = 'Sql' in params ? params.Sql : null;
        this.ReadRows = 'ReadRows' in params ? params.ReadRows : null;
        this.ResultBytes = 'ResultBytes' in params ? params.ResultBytes : null;
        this.MemoryUsage = 'MemoryUsage' in params ? params.MemoryUsage : null;
        this.IsQuery = 'IsQuery' in params ? params.IsQuery : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;

    }
}

/**
 * DescribeRestoreTaskDetail response structure.
 * @class
 */
class DescribeRestoreTaskDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Progress details of the recovery tasks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<RestoreStatus> || null}
         */
        this.RestoreStatus = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RestoreStatus) {
            this.RestoreStatus = new Array();
            for (let z in params.RestoreStatus) {
                let obj = new RestoreStatus();
                obj.deserialize(params.RestoreStatus[z]);
                this.RestoreStatus.push(obj);
            }
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserPolicy response structure.
 * @class
 */
class DescribeUserPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Account details
         * @type {AccountDetailInfo || null}
         */
        this.AccountInfo = null;

        /**
         * Permission configuration information associated with different hosts
         * @type {PermissionHostInfo || null}
         */
        this.Permissions = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AccountInfo) {
            let obj = new AccountDetailInfo();
            obj.deserialize(params.AccountInfo)
            this.AccountInfo = obj;
        }

        if (params.Permissions) {
            let obj = new PermissionHostInfo();
            obj.deserialize(params.Permissions)
            this.Permissions = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNodeStatus request structure.
 * @class
 */
class ModifyNodeStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID, such as cdwch-xxxx
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node information
         * @type {Array.<NodeInfos> || null}
         */
        this.NodeInfos = null;

        /**
         * Node operation
         * @type {string || null}
         */
        this.OperationCode = null;

        /**
         * Timeout period (s)
         * @type {string || null}
         */
        this.RestartTimeOut = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.NodeInfos) {
            this.NodeInfos = new Array();
            for (let z in params.NodeInfos) {
                let obj = new NodeInfos();
                obj.deserialize(params.NodeInfos[z]);
                this.NodeInfos.push(obj);
            }
        }
        this.OperationCode = 'OperationCode' in params ? params.OperationCode : null;
        this.RestartTimeOut = 'RestartTimeOut' in params ? params.RestartTimeOut : null;

    }
}

/**
 * DescribeCreateTablesDDL request structure.
 * @class
 */
class DescribeCreateTablesDDLRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, TCHouse-D resource ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Require the database and table for the table creation DDL.
         * @type {Array.<DbTablesInfo> || null}
         */
        this.DbTablesInfos = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Whether to hide partition information
         * @type {boolean || null}
         */
        this.IsBrief = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.DbTablesInfos) {
            this.DbTablesInfos = new Array();
            for (let z in params.DbTablesInfos) {
                let obj = new DbTablesInfo();
                obj.deserialize(params.DbTablesInfos[z]);
                this.DbTablesInfos.push(obj);
            }
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.IsBrief = 'IsBrief' in params ? params.IsBrief : null;

    }
}

/**
 * RestartClusterForNode response structure.
 * @class
 */
class RestartClusterForNodeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process related information
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateTableSchema request structure.
 * @class
 */
class UpdateTableSchemaRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Database name
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Table name
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Column
         * @type {Array.<Column> || null}
         */
        this.Columns = null;

        /**
         * Bucket information
         * @type {Distribution || null}
         */
        this.Distribution = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Index information. The inverted index and N-Gram index can be configured through this parameter. The Prefix index is related to the sort key and key column, and do not require additional configuration. Configure bloom_filter_columns in the table attribute when BloomFilter index is required.
         * @type {Array.<IndexInfo> || null}
         */
        this.IndexInfos = null;

        /**
         * Table description
         * @type {string || null}
         */
        this.TableComment = null;

        /**
         * Table attribute
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new Column();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }

        if (params.Distribution) {
            let obj = new Distribution();
            obj.deserialize(params.Distribution)
            this.Distribution = obj;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;

        if (params.IndexInfos) {
            this.IndexInfos = new Array();
            for (let z in params.IndexInfos) {
                let obj = new IndexInfo();
                obj.deserialize(params.IndexInfos[z]);
                this.IndexInfos.push(obj);
            }
        }
        this.TableComment = 'TableComment' in params ? params.TableComment : null;

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }

    }
}

/**
 * 
 * @class
 */
class CatalogPermission extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {string || null}
         */
        this.CatalogName = null;

        /**
         * 
         * @type {Array.<string> || null}
         */
        this.Permissions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;
        this.Permissions = 'Permissions' in params ? params.Permissions : null;

    }
}

/**
 * CancelBackupJob response structure.
 * @class
 */
class CancelBackupJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAreaRegion request structure.
 * @class
 */
class DescribeAreaRegionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether it is an international site
         * @type {boolean || null}
         */
        this.IsInternationalSite = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsInternationalSite = 'IsInternationalSite' in params ? params.IsInternationalSite : null;

    }
}

/**
 * Slow log records
 * @class
 */
class SlowQueryRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * User query 
         * @type {string || null}
         */
        this.OsUser = null;

        /**
         * ID query
         * @type {string || null}
         */
        this.InitialQueryId = null;

        /**
         * SQL statement
         * @type {string || null}
         */
        this.Sql = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.QueryStartTime = null;

        /**
         * Execution duration
         * @type {number || null}
         */
        this.DurationMs = null;

        /**
         * The number of read rows
         * @type {number || null}
         */
        this.ReadRows = null;

        /**
         * Total number of read bytes
         * @type {number || null}
         */
        this.ResultRows = null;

        /**
         * Result bytes
         * @type {number || null}
         */
        this.ResultBytes = null;

        /**
         * Memory
         * @type {number || null}
         */
        this.MemoryUsage = null;

        /**
         * Initial query IP
         * @type {string || null}
         */
        this.InitialAddress = null;

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Whether it is a query. 0 indicates no, and 1 indicates query statement.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsQuery = null;

        /**
         * MB format of ResultBytes
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ResultBytesMB = null;

        /**
         * MemoryUsage, in MB
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MemoryUsageMB = null;

        /**
         * DurationMs, in seconds
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DurationSec = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OsUser = 'OsUser' in params ? params.OsUser : null;
        this.InitialQueryId = 'InitialQueryId' in params ? params.InitialQueryId : null;
        this.Sql = 'Sql' in params ? params.Sql : null;
        this.QueryStartTime = 'QueryStartTime' in params ? params.QueryStartTime : null;
        this.DurationMs = 'DurationMs' in params ? params.DurationMs : null;
        this.ReadRows = 'ReadRows' in params ? params.ReadRows : null;
        this.ResultRows = 'ResultRows' in params ? params.ResultRows : null;
        this.ResultBytes = 'ResultBytes' in params ? params.ResultBytes : null;
        this.MemoryUsage = 'MemoryUsage' in params ? params.MemoryUsage : null;
        this.InitialAddress = 'InitialAddress' in params ? params.InitialAddress : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.IsQuery = 'IsQuery' in params ? params.IsQuery : null;
        this.ResultBytesMB = 'ResultBytesMB' in params ? params.ResultBytesMB : null;
        this.MemoryUsageMB = 'MemoryUsageMB' in params ? params.MemoryUsageMB : null;
        this.DurationSec = 'DurationSec' in params ? params.DurationSec : null;

    }
}

/**
 * DescribeInstanceNodes request structure.
 * @class
 */
class DescribeInstanceNodesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Cluster role type, defaulted as "data node".
         * @type {string || null}
         */
        this.NodeRole = null;

        /**
         * Pagination parameters. The first page is 0, and the second page is 10.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination parameters. The pagination step length is 10 by default.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Display policy, and all items are displayed when All is selected.
         * @type {string || null}
         */
        this.DisplayPolicy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.NodeRole = 'NodeRole' in params ? params.NodeRole : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.DisplayPolicy = 'DisplayPolicy' in params ? params.DisplayPolicy : null;

    }
}

/**
 * Cluster billing-related information
 * @class
 */
class ChargeProperties extends  AbstractModel {
    constructor(){
        super();

        /**
         * Billing type: PREPAID for prepayment, and POSTPAID_BY_HOUR for postpayment.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ChargeType = null;

        /**
         * Whether to automatically renew. 1 means automatic renewal is enabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Billing duration
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Billing time unit, and "m" means month, etc.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TimeUnit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;

    }
}

/**
 * DescribeWorkloadGroup request structure.
 * @class
 */
class DescribeWorkloadGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeCoolDownBackends request structure.
 * @class
 */
class DescribeCoolDownBackendsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * CheckCoolDownWorkingVariableConfigCorrect request structure.
 * @class
 */
class CheckCoolDownWorkingVariableConfigCorrectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Cluster operation description
 * @class
 */
class InstanceOperation extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation name, such as create_instance, and scaleout_instance
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Operation result. Success indicates success; Fail indicates failure.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Operation name description, such as create, and modify the cluster name
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Operation level, such as Critical, Normal
         * @type {string || null}
         */
        this.Level = null;

        /**
         * Operation level description, such as high risk, and normal
         * @type {string || null}
         */
        this.LevelDesc = null;

        /**
         * Operation start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Operation end time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Operation result description, such as Success and Fail.
         * @type {string || null}
         */
        this.ResultDesc = null;

        /**
         * Operation user ID
         * @type {string || null}
         */
        this.OperateUin = null;

        /**
         * The jobid corresponding to the operation
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * Operation details
         * @type {string || null}
         */
        this.OperationDetail = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Desc = 'Desc' in params ? params.Desc : null;
        this.Level = 'Level' in params ? params.Level : null;
        this.LevelDesc = 'LevelDesc' in params ? params.LevelDesc : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.ResultDesc = 'ResultDesc' in params ? params.ResultDesc : null;
        this.OperateUin = 'OperateUin' in params ? params.OperateUin : null;
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.OperationDetail = 'OperationDetail' in params ? params.OperationDetail : null;

    }
}

/**
 * Backup table information
 * @class
 */
class BackupTableContent extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Table = null;

        /**
         * Total number of bytes in the table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalBytes = null;

        /**
         * Size of a single replica
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SingleReplicaBytes = null;

        /**
         * Backup status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupStatus = null;

        /**
         * Error message of the backup
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BackupErrorMsg = null;

        /**
         * Whether to bind the cold storage policy to the database and table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsOpenCoolDown = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Database = 'Database' in params ? params.Database : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.TotalBytes = 'TotalBytes' in params ? params.TotalBytes : null;
        this.SingleReplicaBytes = 'SingleReplicaBytes' in params ? params.SingleReplicaBytes : null;
        this.BackupStatus = 'BackupStatus' in params ? params.BackupStatus : null;
        this.BackupErrorMsg = 'BackupErrorMsg' in params ? params.BackupErrorMsg : null;
        this.IsOpenCoolDown = 'IsOpenCoolDown' in params ? params.IsOpenCoolDown : null;

    }
}

/**
 * CreateInstanceNew response structure.
 * @class
 */
class CreateInstanceNewResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process ID
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSqlApis request structure.
 * @class
 */
class DescribeSqlApisRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The IP address of the user link
         * @type {string || null}
         */
        this.WhiteHost = null;

        /**
         * catalog name
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Catalog collection
         * @type {Array.<string> || null}
         */
        this.Catalogs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WhiteHost = 'WhiteHost' in params ? params.WhiteHost : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.Catalogs = 'Catalogs' in params ? params.Catalogs : null;

    }
}

/**
 * ModifySecurityGroups request structure.
 * @class
 */
class ModifySecurityGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Security group information before modification
         * @type {Array.<string> || null}
         */
        this.OldSecurityGroupIds = null;

        /**
         * Modified security group information
         * @type {Array.<string> || null}
         */
        this.ModifySecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.OldSecurityGroupIds = 'OldSecurityGroupIds' in params ? params.OldSecurityGroupIds : null;
        this.ModifySecurityGroupIds = 'ModifySecurityGroupIds' in params ? params.ModifySecurityGroupIds : null;

    }
}

/**
 * Permission overview
 * @class
 */
class PermissionHostInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * A list of user permissions in the global scope, which can be applied to all databases and tables.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.GlobalPermissions = null;

        /**
         * The key is the database name, and the value is the permission list of the user on the database.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DatabasePermissions> || null}
         */
        this.DatabasePermissions = null;

        /**
         * The key is the full name of the table, and the value is the permission list of the user on the table.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TablePermissions> || null}
         */
        this.TablePermissions = null;

        /**
         * The key is the full name of the catalog, and the value is the permission list of the user on the catalog.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CatalogPermission> || null}
         */
        this.CatalogPermissions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GlobalPermissions = 'GlobalPermissions' in params ? params.GlobalPermissions : null;

        if (params.DatabasePermissions) {
            this.DatabasePermissions = new Array();
            for (let z in params.DatabasePermissions) {
                let obj = new DatabasePermissions();
                obj.deserialize(params.DatabasePermissions[z]);
                this.DatabasePermissions.push(obj);
            }
        }

        if (params.TablePermissions) {
            this.TablePermissions = new Array();
            for (let z in params.TablePermissions) {
                let obj = new TablePermissions();
                obj.deserialize(params.TablePermissions[z]);
                this.TablePermissions.push(obj);
            }
        }

        if (params.CatalogPermissions) {
            this.CatalogPermissions = new Array();
            for (let z in params.CatalogPermissions) {
                let obj = new CatalogPermission();
                obj.deserialize(params.CatalogPermissions[z]);
                this.CatalogPermissions.push(obj);
            }
        }

    }
}

/**
 * CreateInstanceNew request structure.
 * @class
 */
class CreateInstanceNewRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * FE specifications
         * @type {CreateInstanceSpec || null}
         */
        this.FeSpec = null;

        /**
         * BE specifications.
         * @type {CreateInstanceSpec || null}
         */
        this.BeSpec = null;

        /**
         * Whether it is highly available.
         * @type {boolean || null}
         */
        this.HaFlag = null;

        /**
         * User VPCID
         * @type {string || null}
         */
        this.UserVPCId = null;

        /**
         * User subnet ID
         * @type {string || null}
         */
        this.UserSubnetId = null;

        /**
         * Product version number
         * @type {string || null}
         */
        this.ProductVersion = null;

        /**
         * Payment type
         * @type {ChargeProperties || null}
         */
        this.ChargeProperties = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Database password
         * @type {string || null}
         */
        this.DorisUserPwd = null;

        /**
         * Tag list
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * High availability type:
0 indicates non-high availability (only one FE, FeSpec.CreateInstanceSpec.Count=1),
1 indicates read high availability (at least 3 FEs must be deployed, FeSpec.CreateInstanceSpec.Count>=3, and it must be an odd number),
2 indicates read and write high availability (at least 5 FEs must be deployed, FeSpec.CreateInstanceSpec.Count>=5, and it must be an odd number).
         * @type {number || null}
         */
        this.HaType = null;

        /**
         * Whether the table name is case sensitive, 0 refers to sensitive, 1 refers to insensitive, compared in lowercase; 2 refers to insensitive, and the table name is changed to lowercase for storage.
         * @type {number || null}
         */
        this.CaseSensitive = null;

        /**
         * Whether to enable multi-availability zone.
         * @type {boolean || null}
         */
        this.EnableMultiZones = null;

        /**
         * After the Multi-AZ is enabled, all user's Availability Zones and Subnets information are shown.
         * @type {NetworkInfo || null}
         */
        this.UserMultiZoneInfos = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;

        if (params.FeSpec) {
            let obj = new CreateInstanceSpec();
            obj.deserialize(params.FeSpec)
            this.FeSpec = obj;
        }

        if (params.BeSpec) {
            let obj = new CreateInstanceSpec();
            obj.deserialize(params.BeSpec)
            this.BeSpec = obj;
        }
        this.HaFlag = 'HaFlag' in params ? params.HaFlag : null;
        this.UserVPCId = 'UserVPCId' in params ? params.UserVPCId : null;
        this.UserSubnetId = 'UserSubnetId' in params ? params.UserSubnetId : null;
        this.ProductVersion = 'ProductVersion' in params ? params.ProductVersion : null;

        if (params.ChargeProperties) {
            let obj = new ChargeProperties();
            obj.deserialize(params.ChargeProperties)
            this.ChargeProperties = obj;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.DorisUserPwd = 'DorisUserPwd' in params ? params.DorisUserPwd : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.HaType = 'HaType' in params ? params.HaType : null;
        this.CaseSensitive = 'CaseSensitive' in params ? params.CaseSensitive : null;
        this.EnableMultiZones = 'EnableMultiZones' in params ? params.EnableMultiZones : null;

        if (params.UserMultiZoneInfos) {
            let obj = new NetworkInfo();
            obj.deserialize(params.UserMultiZoneInfos)
            this.UserMultiZoneInfos = obj;
        }

    }
}

/**
 * DescribeDatabase response structure.
 * @class
 */
class DescribeDatabaseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DbInfo> || null}
         */
        this.DbInfos = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DbInfos) {
            this.DbInfos = new Array();
            for (let z in params.DbInfos) {
                let obj = new DbInfo();
                obj.deserialize(params.DbInfos[z]);
                this.DbInfos.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateCoolDown request structure.
 * @class
 */
class UpdateCoolDownRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Whether to enable. 0: disable; 1: enable.
         * @type {number || null}
         */
        this.Enable = null;

        /**
         * Address of the COS bucket where the user stores layered hot and cold data
         * @type {string || null}
         */
        this.Bucket = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Enable = 'Enable' in params ? params.Enable : null;
        this.Bucket = 'Bucket' in params ? params.Bucket : null;

    }
}

/**
 * Partition information of the table
 * @class
 */
class Partition extends  AbstractModel {
    constructor(){
        super();

        /**
         * Partition type:
●Range: The partition column is usually of time or integer type. Four writing methods are supported.
●List: The partition value is an enumeration value.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PartitionType = null;

        /**
         * Whether to automatically partition

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.AutoPartition = null;

        /**
         * Partition information when the partition type is Range

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<RangeInfo> || null}
         */
        this.RangeInfos = null;

        /**
         * Partition information when the partition type is List

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ListInfo> || null}
         */
        this.ListInfos = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PartitionType = 'PartitionType' in params ? params.PartitionType : null;
        this.AutoPartition = 'AutoPartition' in params ? params.AutoPartition : null;

        if (params.RangeInfos) {
            this.RangeInfos = new Array();
            for (let z in params.RangeInfos) {
                let obj = new RangeInfo();
                obj.deserialize(params.RangeInfos[z]);
                this.RangeInfos.push(obj);
            }
        }

        if (params.ListInfos) {
            this.ListInfos = new Array();
            for (let z in params.ListInfos) {
                let obj = new ListInfo();
                obj.deserialize(params.ListInfos[z]);
                this.ListInfos.push(obj);
            }
        }

    }
}

/**
 * Hot/cold data layering policy
 * @class
 */
class CoolDownPolicyInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Policy name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PolicyName = null;

        /**
         * cooldown_ttl
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CooldownDatetime = null;

        /**
         * cooldown_datetime
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CooldownTtl = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PolicyName = 'PolicyName' in params ? params.PolicyName : null;
        this.CooldownDatetime = 'CooldownDatetime' in params ? params.CooldownDatetime : null;
        this.CooldownTtl = 'CooldownTtl' in params ? params.CooldownTtl : null;

    }
}

/**
 * OpenCoolDownPolicy request structure.
 * @class
 */
class OpenCoolDownPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * DB name
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Table name
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Operation type
         * @type {string || null}
         */
        this.OperationType = null;

        /**
         * Separate with commas. The DB name is required, for example, db1.tb1,db1.tb2,db2.tb1.
         * @type {string || null}
         */
        this.BatchOpenCoolDownTables = null;

        /**
         * Policy name required for binding
         * @type {string || null}
         */
        this.PolicyName = null;

        /**
         * Separate with commas, for example, p1,p2,p3.
         * @type {string || null}
         */
        this.BatchOpenCoolDownPartitions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.OperationType = 'OperationType' in params ? params.OperationType : null;
        this.BatchOpenCoolDownTables = 'BatchOpenCoolDownTables' in params ? params.BatchOpenCoolDownTables : null;
        this.PolicyName = 'PolicyName' in params ? params.PolicyName : null;
        this.BatchOpenCoolDownPartitions = 'BatchOpenCoolDownPartitions' in params ? params.BatchOpenCoolDownPartitions : null;

    }
}

/**
 * Information of Range type partition
 * @class
 */
class RangeInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Range partition type:
●FIXED: Define the left closed and right open interval of the partition.
●LESS THAN: Only define the upper bound of the partition.
●BATCH RANGE: Batch create RANGE partitions of numeric and time types, define the left closed and right open intervals of the partitions, and set the step size.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RangeType = null;

        /**
         * Partition name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PartitionName = null;

        /**
         * The left-closed interval of each partition column when RangeType is FIXED or BATCH RANGE

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Left = null;

        /**
         * The right open interval of each partition column when RangeType is FIXED or BATCH RANGE

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Right = null;

        /**
         * The upper bound of each partition column when RangeType is LESS THAN

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Max = null;

        /**
         * RangeType is the step size of BATCH RANGE

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StepLength = null;

        /**
         * Fill it in when RangeType is BATCH RANGE or automatic partitioning. It indicates the step size unit when the partition column is of time type.
●YEAR: year
●MONTH: month
●WEEK: week
●DAY: day

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Unit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RangeType = 'RangeType' in params ? params.RangeType : null;
        this.PartitionName = 'PartitionName' in params ? params.PartitionName : null;
        this.Left = 'Left' in params ? params.Left : null;
        this.Right = 'Right' in params ? params.Right : null;
        this.Max = 'Max' in params ? params.Max : null;
        this.StepLength = 'StepLength' in params ? params.StepLength : null;
        this.Unit = 'Unit' in params ? params.Unit : null;

    }
}

/**
 * Connection information of external Doris clusters
 * @class
 */
class DorisSourceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The IP address of fe in the Doris cluster
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Host = null;

        /**
         * The fe port number of the Doris cluster
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Port = null;

        /**
         * Account of the Doris cluster
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Password of the Doris cluster
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Password = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Host = 'Host' in params ? params.Host : null;
        this.Port = 'Port' in params ? params.Port : null;
        this.User = 'User' in params ? params.User : null;
        this.Password = 'Password' in params ? params.Password : null;

    }
}

/**
 * OpenCoolDown response structure.
 * @class
 */
class OpenCoolDownResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Specifications of nodes in the cluster and disk specifications description
 * @class
 */
class AttachCBSSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node disk type, such as CLOUD_SSD"\"CLOUD_PREMIUM
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Disk capacity, in GB
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Total number of disks
         * @type {number || null}
         */
        this.DiskCount = null;

        /**
         * Description
         * @type {string || null}
         */
        this.DiskDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.DiskCount = 'DiskCount' in params ? params.DiskCount : null;
        this.DiskDesc = 'DiskDesc' in params ? params.DiskDesc : null;

    }
}

/**
 * Database audit
 * @class
 */
class DataBaseAuditRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query user
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OsUser = null;

        /**
         * Query ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InitialQueryId = null;

        /**
         * SQL statement
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Sql = null;

        /**
         * Start time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.QueryStartTime = null;

        /**
         * Execution duration
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DurationMs = null;

        /**
         * The number of read rows
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ReadRows = null;

        /**
         * Total number of read bytes
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ResultRows = null;

        /**
         * Result bytes
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ResultBytes = null;

        /**
         * Memory
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MemoryUsage = null;

        /**
         * Initial query IP
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InitialAddress = null;

        /**
         * Database
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * SQL type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SqlType = null;

        /**
         * Catalog name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Catalog = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OsUser = 'OsUser' in params ? params.OsUser : null;
        this.InitialQueryId = 'InitialQueryId' in params ? params.InitialQueryId : null;
        this.Sql = 'Sql' in params ? params.Sql : null;
        this.QueryStartTime = 'QueryStartTime' in params ? params.QueryStartTime : null;
        this.DurationMs = 'DurationMs' in params ? params.DurationMs : null;
        this.ReadRows = 'ReadRows' in params ? params.ReadRows : null;
        this.ResultRows = 'ResultRows' in params ? params.ResultRows : null;
        this.ResultBytes = 'ResultBytes' in params ? params.ResultBytes : null;
        this.MemoryUsage = 'MemoryUsage' in params ? params.MemoryUsage : null;
        this.InitialAddress = 'InitialAddress' in params ? params.InitialAddress : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.SqlType = 'SqlType' in params ? params.SqlType : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;

    }
}

/**
 * CopyTableDatas response structure.
 * @class
 */
class CopyTableDatasResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Modification history of the cluster configuration files
 * @class
 */
class ClusterConfigsHistory extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration file's name
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * Modified configuration file content; base64 code
         * @type {string || null}
         */
        this.NewConfValue = null;

        /**
         * Configuration file content before modification; base64 code
         * @type {string || null}
         */
        this.OldConfValue = null;

        /**
         * Reason for modification
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.ModifyTime = null;

        /**
         * Modify sub-account ID
         * @type {string || null}
         */
        this.UserUin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FileName = 'FileName' in params ? params.FileName : null;
        this.NewConfValue = 'NewConfValue' in params ? params.NewConfValue : null;
        this.OldConfValue = 'OldConfValue' in params ? params.OldConfValue : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;
        this.UserUin = 'UserUin' in params ? params.UserUin : null;

    }
}

/**
 * KV configuration
 * @class
 */
class InstanceConfigItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * key
         * @type {string || null}
         */
        this.ConfKey = null;

        /**
         * value
         * @type {string || null}
         */
        this.ConfValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConfKey = 'ConfKey' in params ? params.ConfKey : null;
        this.ConfValue = 'ConfValue' in params ? params.ConfValue : null;

    }
}

/**
 * Bucket information of the table
 * @class
 */
class Distribution extends  AbstractModel {
    constructor(){
        super();

        /**
         * Bucket type:
●Hash: hash bucket
●Random: random number bucket

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DistributionType = null;

        /**
         * Number of buckets
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Count = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DistributionType = 'DistributionType' in params ? params.DistributionType : null;
        this.Count = 'Count' in params ? params.Count : null;

    }
}

/**
 * Account details
 * @class
 */
class AccountDetailInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Username

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Host name or IP address, which indicates the host to which the user belongs.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Host = null;

        /**
         * User description information

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.Host = 'Host' in params ? params.Host : null;
        this.UserDescription = 'UserDescription' in params ? params.UserDescription : null;

    }
}

/**
 * CreateTable request structure.
 * @class
 */
class CreateTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The database where the table is located; if it does not exist, create one.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Name of the table to be created
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Table data model: 
AGG_KEY: aggregation model; 
UNI_KEY: primary key model; 
DUP_KEY: detail model
         * @type {string || null}
         */
        this.KeysType = null;

        /**
         * Column information of the table
         * @type {Array.<Column> || null}
         */
        this.Columns = null;

        /**
         * Bucket information
         * @type {Distribution || null}
         */
        this.Distribution = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Index information. The inverted index and N-Gram index can be configured through this parameter. The Prefix index is related to the sort key and key column, and do not require additional configuration. Configure bloom_filter_columns in the table attribute when BloomFilter index is required.
         * @type {Array.<IndexInfo> || null}
         */
        this.IndexInfos = null;

        /**
         * Partition information
         * @type {Partition || null}
         */
        this.Partition = null;

        /**
         * Table description
         * @type {string || null}
         */
        this.TableComment = null;

        /**
         * Table attribute
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.KeysType = 'KeysType' in params ? params.KeysType : null;

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new Column();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }

        if (params.Distribution) {
            let obj = new Distribution();
            obj.deserialize(params.Distribution)
            this.Distribution = obj;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;

        if (params.IndexInfos) {
            this.IndexInfos = new Array();
            for (let z in params.IndexInfos) {
                let obj = new IndexInfo();
                obj.deserialize(params.IndexInfos[z]);
                this.IndexInfos.push(obj);
            }
        }

        if (params.Partition) {
            let obj = new Partition();
            obj.deserialize(params.Partition)
            this.Partition = obj;
        }
        this.TableComment = 'TableComment' in params ? params.TableComment : null;

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }

    }
}

/**
 * Attribute information of databases, tables, indexes, etc.
 * @class
 */
class Property extends  AbstractModel {
    constructor(){
        super();

        /**
         * Attribute key
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PropertyKey = null;

        /**
         * Attribute value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PropertyValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PropertyKey = 'PropertyKey' in params ? params.PropertyKey : null;
        this.PropertyValue = 'PropertyValue' in params ? params.PropertyValue : null;

    }
}

/**
 * Table-level permissions
 * @class
 */
class TablePermissions extends  AbstractModel {
    constructor(){
        super();

        /**
         * Full name of the table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Table permission
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Permissions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.Permissions = 'Permissions' in params ? params.Permissions : null;

    }
}

/**
 * CreateBackUpSchedule request structure.
 * @class
 */
class CreateBackUpScheduleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Required to be uploaded when editing
         * @type {number || null}
         */
        this.ScheduleId = null;

        /**
         * Selected weeks, separated by commas.
Discarded: Use ScheduleInfo.
         * @type {string || null}
         */
        this.WeekDays = null;

        /**
         * Hour for executing the backup taskDiscarded: Use ScheduleInfo.
         * @type {number || null}
         */
        this.ExecuteHour = null;

        /**
         * Backup table list
         * @type {Array.<BackupTableContent> || null}
         */
        this.BackUpTables = null;

        /**
         * 0: default; 1: one-time backup for the remote Doris
         * @type {number || null}
         */
        this.BackupType = null;

        /**
         * Connection information of the remote doris cluster
         * @type {DorisSourceInfo || null}
         */
        this.DorisSourceInfo = null;

        /**
         * 0: default; 1: one-time backup; 2: remote backup
         * @type {number || null}
         */
        this.BackupTimeType = null;

        /**
         * 0: default; 1: immediate recovery after the backup is completed.
         * @type {number || null}
         */
        this.RestoreType = null;

        /**
         * 0: default; 1: connecting to COS using a custom key.
         * @type {number || null}
         */
        this.AuthType = null;

        /**
         * Cos certification information
         * @type {CosSourceInfo || null}
         */
        this.CosSourceInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScheduleId = 'ScheduleId' in params ? params.ScheduleId : null;
        this.WeekDays = 'WeekDays' in params ? params.WeekDays : null;
        this.ExecuteHour = 'ExecuteHour' in params ? params.ExecuteHour : null;

        if (params.BackUpTables) {
            this.BackUpTables = new Array();
            for (let z in params.BackUpTables) {
                let obj = new BackupTableContent();
                obj.deserialize(params.BackUpTables[z]);
                this.BackUpTables.push(obj);
            }
        }
        this.BackupType = 'BackupType' in params ? params.BackupType : null;

        if (params.DorisSourceInfo) {
            let obj = new DorisSourceInfo();
            obj.deserialize(params.DorisSourceInfo)
            this.DorisSourceInfo = obj;
        }
        this.BackupTimeType = 'BackupTimeType' in params ? params.BackupTimeType : null;
        this.RestoreType = 'RestoreType' in params ? params.RestoreType : null;
        this.AuthType = 'AuthType' in params ? params.AuthType : null;

        if (params.CosSourceInfo) {
            let obj = new CosSourceInfo();
            obj.deserialize(params.CosSourceInfo)
            this.CosSourceInfo = obj;
        }

    }
}

/**
 * DeleteTable request structure.
 * @class
 */
class DeleteTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The name of the database where the table belongs needs to be deleted.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Table name to be deleted
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * True: The system will not check whether there are unfinished transactions in the table. The table will be deleted directly and cannot be recovered. False: The deleted table can be recovered within a period of time (default value).
         * @type {boolean || null}
         */
        this.IsForce = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.IsForce = 'IsForce' in params ? params.IsForce : null;

    }
}

/**
 * ActionAlterUser response structure.
 * @class
 */
class ActionAlterUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information about cos in the backup instance
 * @class
 */
class BackupCosInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The cos bucket where the backup file is located.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CosBucket = null;

        /**
         * The full cos path where the backup file is located.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CosPath = null;

        /**
         * Backup file name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SnapShotPath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosBucket = 'CosBucket' in params ? params.CosBucket : null;
        this.CosPath = 'CosPath' in params ? params.CosPath : null;
        this.SnapShotPath = 'SnapShotPath' in params ? params.SnapShotPath : null;

    }
}

/**
 * DescribeClusterConfigsHistory request structure.
 * @class
 */
class DescribeClusterConfigsHistoryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Pagination parameters. The first page is 0, and the second page is 10.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination parameters. The pagination step length is 10 by default.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Start of the time range for configuration modification history
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End of the time range for configuration modification history
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Configuration file name array to be queried. If it is empty, all historical records will be queried. Currently supported configuration file names are as follows:
apache_hdfs_broker.conf; be.conf; fe.conf; core-site.xml; hdfs-site.xml; odbcinst.ini
         * @type {Array.<string> || null}
         */
        this.ConfigFileNames = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.ConfigFileNames = 'ConfigFileNames' in params ? params.ConfigFileNames : null;

    }
}

/**
 * DeleteTable response structure.
 * @class
 */
class DeleteTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateWorkloadGroup request structure.
 * @class
 */
class CreateWorkloadGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID	
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Resource group configuration
         * @type {WorkloadGroupConfig || null}
         */
        this.WorkloadGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.WorkloadGroup) {
            let obj = new WorkloadGroupConfig();
            obj.deserialize(params.WorkloadGroup)
            this.WorkloadGroup = obj;
        }

    }
}

/**
 * DescribeInstanceNodesInfo request structure.
 * @class
 */
class DescribeInstanceNodesInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;

    }
}

/**
 * DescribeInstancesHealthState response structure.
 * @class
 */
class DescribeInstancesHealthStateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Base64-encoded data, which contains the cluster health information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDatabaseAuditDownload request structure.
 * @class
 */
class DescribeDatabaseAuditDownloadRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Paging
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Paging
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.OrderType = null;

        /**
         * User
         * @type {string || null}
         */
        this.User = null;

        /**
         * Database
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * SQL type
         * @type {string || null}
         */
        this.SqlType = null;

        /**
         * SQL statement
         * @type {string || null}
         */
        this.Sql = null;

        /**
         * Users (multiple selections)
         * @type {Array.<string> || null}
         */
        this.Users = null;

        /**
         * Databases (multiple selections)
         * @type {Array.<string> || null}
         */
        this.DbNames = null;

        /**
         * SQL types (multiple selections)
         * @type {Array.<string> || null}
         */
        this.SqlTypes = null;

        /**
         * Catalog names (multiple selections)
         * @type {Array.<string> || null}
         */
        this.Catalogs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.OrderType = 'OrderType' in params ? params.OrderType : null;
        this.User = 'User' in params ? params.User : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.SqlType = 'SqlType' in params ? params.SqlType : null;
        this.Sql = 'Sql' in params ? params.Sql : null;
        this.Users = 'Users' in params ? params.Users : null;
        this.DbNames = 'DbNames' in params ? params.DbNames : null;
        this.SqlTypes = 'SqlTypes' in params ? params.SqlTypes : null;
        this.Catalogs = 'Catalogs' in params ? params.Catalogs : null;

    }
}

/**
 * DescribeInstanceNodesRole response structure.
 * @class
 */
class DescribeInstanceNodesRoleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error code
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * Total number of nodes
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * None
         * @type {Array.<NodeInfos> || null}
         */
        this.NodeInfos = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.NodeInfos) {
            this.NodeInfos = new Array();
            for (let z in params.NodeInfos) {
                let obj = new NodeInfos();
                obj.deserialize(params.NodeInfos[z]);
                this.NodeInfos.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ExecuteSelectQuery response structure.
 * @class
 */
class ExecuteSelectQueryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total records of query results
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Field name array of query results
         * @type {Array.<string> || null}
         */
        this.Fields = null;

        /**
         * Field type array of query results
         * @type {Array.<string> || null}
         */
        this.FieldTypes = null;

        /**
         * Returned data record array. Each element is an array, containing the value of the corresponding field.
         * @type {Array.<Rows> || null}
         */
        this.Rows = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.Fields = 'Fields' in params ? params.Fields : null;
        this.FieldTypes = 'FieldTypes' in params ? params.FieldTypes : null;

        if (params.Rows) {
            this.Rows = new Array();
            for (let z in params.Rows) {
                let obj = new Rows();
                obj.deserialize(params.Rows[z]);
                this.Rows.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DestroyInstance response structure.
 * @class
 */
class DestroyInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process ID
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * QueryTableData response structure.
 * @class
 */
class QueryTableDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total records of query results
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Field name array of query results
         * @type {Array.<string> || null}
         */
        this.Fields = null;

        /**
         * Field type array of query results
         * @type {Array.<string> || null}
         */
        this.FieldTypes = null;

        /**
         * Returned data record array. Each element is an array, containing the value of the corresponding field.
         * @type {Array.<Rows> || null}
         */
        this.Rows = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.Fields = 'Fields' in params ? params.Fields : null;
        this.FieldTypes = 'FieldTypes' in params ? params.FieldTypes : null;

        if (params.Rows) {
            this.Rows = new Array();
            for (let z in params.Rows) {
                let obj = new Rows();
                obj.deserialize(params.Rows[z]);
                this.Rows.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResizeDisk request structure.
 * @class
 */
class ResizeDiskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Role (MATER/CORE), MASTER corresponds to FE, CORE corresponds to BE.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Cloud disk size
         * @type {number || null}
         */
        this.DiskSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;

    }
}

/**
 * CopyTableDatas request structure.
 * @class
 */
class CopyTableDatasRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Name of the database where the source table is located.
         * @type {string || null}
         */
        this.CopiedFromDb = null;

        /**
         * Source table name
         * @type {string || null}
         */
        this.CopiedFromTable = null;

        /**
         * Name of the database where the target table is located
         * @type {string || null}
         */
        this.CopyToDb = null;

        /**
         * Target table name. If the table already exists, the structure of the source table and target table should be the same.
         * @type {string || null}
         */
        this.CopyToTable = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Whether the data in the target table is overwritten. The default value is False.
         * @type {boolean || null}
         */
        this.IsDataOverwrite = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.CopiedFromDb = 'CopiedFromDb' in params ? params.CopiedFromDb : null;
        this.CopiedFromTable = 'CopiedFromTable' in params ? params.CopiedFromTable : null;
        this.CopyToDb = 'CopyToDb' in params ? params.CopyToDb : null;
        this.CopyToTable = 'CopyToTable' in params ? params.CopyToTable : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.IsDataOverwrite = 'IsDataOverwrite' in params ? params.IsDataOverwrite : null;

    }
}

/**
 * DescribeSlowQueryRecords response structure.
 * @class
 */
class DescribeSlowQueryRecordsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Record list
         * @type {Array.<SlowQueryRecord> || null}
         */
        this.SlowQueryRecords = null;

        /**
         * All database names
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DBNameList = null;

        /**
         * All catalog names
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.CatalogNameList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.SlowQueryRecords) {
            this.SlowQueryRecords = new Array();
            for (let z in params.SlowQueryRecords) {
                let obj = new SlowQueryRecord();
                obj.deserialize(params.SlowQueryRecords[z]);
                this.SlowQueryRecords.push(obj);
            }
        }
        this.DBNameList = 'DBNameList' in params ? params.DBNameList : null;
        this.CatalogNameList = 'CatalogNameList' in params ? params.CatalogNameList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyWorkloadGroupStatus request structure.
 * @class
 */
class ModifyWorkloadGroupStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Whether to enable resource group: open and close
         * @type {string || null}
         */
        this.OperationType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.OperationType = 'OperationType' in params ? params.OperationType : null;

    }
}

/**
 * Database information
 * @class
 */
class DbInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Database attribute
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

        /**
         * Metadata address (Available when the data source is Hive or DLC.)

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Location = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbName = 'DbName' in params ? params.DbName : null;

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }
        this.Location = 'Location' in params ? params.Location : null;

    }
}

/**
 * CreateCoolDownPolicy request structure.
 * @class
 */
class CreateCoolDownPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Policy name
         * @type {string || null}
         */
        this.PolicyName = null;

        /**
         * cooldown_ttl
         * @type {string || null}
         */
        this.CoolDownTtl = null;

        /**
         * cooldown_datetime
         * @type {string || null}
         */
        this.CoolDownDatetime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PolicyName = 'PolicyName' in params ? params.PolicyName : null;
        this.CoolDownTtl = 'CoolDownTtl' in params ? params.CoolDownTtl : null;
        this.CoolDownDatetime = 'CoolDownDatetime' in params ? params.CoolDownDatetime : null;

    }
}

/**
 * DescribeSqlApis response structure.
 * @class
 */
class DescribeSqlApisResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCreateTablesDDL response structure.
 * @class
 */
class DescribeCreateTablesDDLResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * DDL information for creating a table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CreateTablesDDL> || null}
         */
        this.CreateTablesDDLs = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CreateTablesDDLs) {
            this.CreateTablesDDLs = new Array();
            for (let z in params.CreateTablesDDLs) {
                let obj = new CreateTablesDDL();
                obj.deserialize(params.CreateTablesDDLs[z]);
                this.CreateTablesDDLs.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstance request structure.
 * @class
 */
class ModifyInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Newly modified instance name
         * @type {string || null}
         */
        this.InstanceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;

    }
}

/**
 * DescribeSpec response structure.
 * @class
 */
class DescribeSpecResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Zookeeper node specification description
         * @type {Array.<ResourceSpec> || null}
         */
        this.MasterSpec = null;

        /**
         * Data node specification description
         * @type {Array.<ResourceSpec> || null}
         */
        this.CoreSpec = null;

        /**
         * Cloud disk list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DiskSpec> || null}
         */
        this.AttachCBSSpec = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MasterSpec) {
            this.MasterSpec = new Array();
            for (let z in params.MasterSpec) {
                let obj = new ResourceSpec();
                obj.deserialize(params.MasterSpec[z]);
                this.MasterSpec.push(obj);
            }
        }

        if (params.CoreSpec) {
            this.CoreSpec = new Array();
            for (let z in params.CoreSpec) {
                let obj = new ResourceSpec();
                obj.deserialize(params.CoreSpec[z]);
                this.CoreSpec.push(obj);
            }
        }

        if (params.AttachCBSSpec) {
            this.AttachCBSSpec = new Array();
            for (let z in params.AttachCBSSpec) {
                let obj = new DiskSpec();
                obj.deserialize(params.AttachCBSSpec[z]);
                this.AttachCBSSpec.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstanceKeyValConfigs response structure.
 * @class
 */
class ModifyInstanceKeyValConfigsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * ID
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Query and analyze details
 * @class
 */
class QueryDetails extends  AbstractModel {
    constructor(){
        super();

        /**
         * Initiating User
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Initiator = null;

        /**
         * Access source address

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SourceAddress = null;

        /**
         * Initial request ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InitialRequestId = null;

        /**
         * catalog name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * SQL Type: 0 is non-query, 1 is query, -1 is unrestricted.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SQLType = null;

        /**
         * SQL statement
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SQLStatement = null;

        /**
         * Execution start time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Runtime (s)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * The number of read rows
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RowsRead = null;

        /**
         * Read data volume (MB)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DataRead = null;

        /**
         * Memory usage (MB)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MemoryUsage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Initiator = 'Initiator' in params ? params.Initiator : null;
        this.SourceAddress = 'SourceAddress' in params ? params.SourceAddress : null;
        this.InitialRequestId = 'InitialRequestId' in params ? params.InitialRequestId : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.Database = 'Database' in params ? params.Database : null;
        this.SQLType = 'SQLType' in params ? params.SQLType : null;
        this.SQLStatement = 'SQLStatement' in params ? params.SQLStatement : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.RowsRead = 'RowsRead' in params ? params.RowsRead : null;
        this.DataRead = 'DataRead' in params ? params.DataRead : null;
        this.MemoryUsage = 'MemoryUsage' in params ? params.MemoryUsage : null;

    }
}

/**
 * DescribeBackUpSchedules response structure.
 * @class
 */
class DescribeBackUpSchedulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DDL information of the table
 * @class
 */
class TablesDDL extends  AbstractModel {
    constructor(){
        super();

        /**
         * Table name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * DDL statement for creating a table

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DDLInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.DDLInfo = 'DDLInfo' in params ? params.DDLInfo : null;

    }
}

/**
 * DescribeBackUpTables response structure.
 * @class
 */
class DescribeBackUpTablesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of tables available for backup
         * @type {Array.<BackupTableContent> || null}
         */
        this.AvailableTables = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AvailableTables) {
            this.AvailableTables = new Array();
            for (let z in params.AvailableTables) {
                let obj = new BackupTableContent();
                obj.deserialize(params.AvailableTables[z]);
                this.AvailableTables.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDatabaseAuditRecords response structure.
 * @class
 */
class DescribeDatabaseAuditRecordsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Record list
         * @type {DataBaseAuditRecord || null}
         */
        this.SlowQueryRecords = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.SlowQueryRecords) {
            let obj = new DataBaseAuditRecord();
            obj.deserialize(params.SlowQueryRecords)
            this.SlowQueryRecords = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Instance node description information
 * @class
 */
class InstanceNode extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Model, such as S1
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Number of CPU cores
         * @type {number || null}
         */
        this.Core = null;

        /**
         * Memory size
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * Disk type
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Disk size
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * The name of the clickhouse cluster to which it belongs.
         * @type {string || null}
         */
        this.Role = null;

        /**
         * Status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * rip
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Rip = null;

        /**
         * FE node role
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FeRole = null;

        /**
         * UUID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UUID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.Core = 'Core' in params ? params.Core : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.Role = 'Role' in params ? params.Role : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Rip = 'Rip' in params ? params.Rip : null;
        this.FeRole = 'FeRole' in params ? params.FeRole : null;
        this.UUID = 'UUID' in params ? params.UUID : null;

    }
}

/**
 * ModifyCoolDownPolicy response structure.
 * @class
 */
class ModifyCoolDownPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstancesHealthState request structure.
 * @class
 */
class DescribeInstancesHealthStateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * If this parameter is left blank, all clusters corresponding to the current appId are involved. Otherwise, a specific cluster is involved.
         * @type {string || null}
         */
        this.Input = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Input = 'Input' in params ? params.Input : null;

    }
}

/**
 * NodeInfo
 * @class
 */
class NodeInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User IP
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Node status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Node role name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NodeName = null;

        /**
         * Component name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ComponentName = null;

        /**
         * Node role
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NodeRole = null;

        /**
         * The time when the node was last restarted
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastRestartTime = null;

        /**
         * The availability zone where the node is located
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.NodeName = 'NodeName' in params ? params.NodeName : null;
        this.ComponentName = 'ComponentName' in params ? params.ComponentName : null;
        this.NodeRole = 'NodeRole' in params ? params.NodeRole : null;
        this.LastRestartTime = 'LastRestartTime' in params ? params.LastRestartTime : null;
        this.Zone = 'Zone' in params ? params.Zone : null;

    }
}

/**
 * Front-end rule description
 * @class
 */
class FrontEndRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID sequence
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ID = null;

        /**
         * Rule name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Detailed rules
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Rule = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ID = 'ID' in params ? params.ID : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Rule = 'Rule' in params ? params.Rule : null;

    }
}

/**
 * RestartClusterForConfigs response structure.
 * @class
 */
class RestartClusterForConfigsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process related information
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Instance description information
 * @class
 */
class InstanceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID, "cdw-xxxx" string type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Cluster instance name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Status,
Init is being created. Serving is running. 
Deleted indicates the cluster has been terminated. Deleting indicates the cluster is being terminated.
Modify indicates the cluster is being changed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Version
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Region, ap-guangzhou
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Availability zone, ap-guangzhou-3
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * VPC name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Payment type: hour and prepay
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Expiration time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Data node description information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NodesSummary || null}
         */
        this.MasterSummary = null;

        /**
         * Zookeeper node description information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NodesSummary || null}
         */
        this.CoreSummary = null;

        /**
         * High availability, being true or false
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.HA = null;

        /**
         * High availability type:
0: non-high availability
1: read high availability
2: read-write high availability
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.HaType = null;

        /**
         * Access address. Example: 10.0.0.1:9000
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessInfo = null;

        /**
         * Record ID, in numerical type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Region ID, indicating the region
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Note about availability zone, such as Guangzhou Zone 2
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ZoneDesc = null;

        /**
         * Error process description information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowMsg = null;

        /**
         * Status description, such as "running"
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StatusDesc = null;

        /**
         * Automatic renewal marker
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.RenewFlag = null;

        /**
         * Tag list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Monitoring Information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Monitor = null;

        /**
         * Whether to enable logs.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.HasClsTopic = null;

        /**
         * Log Topic ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ClsTopicId = null;

        /**
         * Logset ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ClsLogSetId = null;

        /**
         * Whether to support XML configuration management.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EnableXMLConfig = null;

        /**
         * Region
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegionDesc = null;

        /**
         * Elastic network interface address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Eip = null;

        /**
         * Cold and hot stratification coefficient
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CosMoveFactor = null;

        /**
         * external/local/yunti
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Kind = null;

        /**
         * COS bucket
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CosBucketName = null;

        /**
         * cbs
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.CanAttachCbs = null;

        /**
         * Minor versions
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BuildVersion = null;

        /**
         * Component Information
Note: The return type here is map[string]struct, not the string type displayed. You can refer to "Sample Value" to parse the data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Components = null;

        /**
         * Determine whether the audit log table has a catalog field.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IfExistCatalog = null;

        /**
         * Page features, used to block some page entrances on the front end.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Characteristic = null;

        /**
         * Timeout period, in seconds
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RestartTimeout = null;

        /**
         * The timeout time for the graceful restart of the kernel. If it is -1, it means it is not set.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GraceShutdownWaitSeconds = null;

        /**
         * Whether the table name is case sensitive, 0 refers to sensitive, 1 refers to insensitive, compared in lowercase; 2 refers to insensitive, and the table name is changed to lowercase for storage.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CaseSensitive = null;

        /**
         * Whether users can bind security groups.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsWhiteSGs = null;

        /**
         * Bound security group information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.BindSGs = null;

        /**
         * Whether it is a multi-AZ.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.EnableMultiZones = null;

        /**
         * User availability zone and subnet information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserNetworkInfos = null;

        /**
         * Whether to enable hot and cold stratification. 0 refers to disabled, and 1 refers to enabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EnableCoolDown = null;

        /**
         * COS buckets are used for hot and cold stratification
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CoolDownBucket = null;

        /**
         * Instance extension information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InstanceDetail || null}
         */
        this.Details = null;

        /**
         * Whether to enable DLC. 0: disable; 1: enable.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EnableDlc = null;

        /**
         * Account type. 0: ordinary user; 1: CAM user.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AccountType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;

        if (params.MasterSummary) {
            let obj = new NodesSummary();
            obj.deserialize(params.MasterSummary)
            this.MasterSummary = obj;
        }

        if (params.CoreSummary) {
            let obj = new NodesSummary();
            obj.deserialize(params.CoreSummary)
            this.CoreSummary = obj;
        }
        this.HA = 'HA' in params ? params.HA : null;
        this.HaType = 'HaType' in params ? params.HaType : null;
        this.AccessInfo = 'AccessInfo' in params ? params.AccessInfo : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.ZoneDesc = 'ZoneDesc' in params ? params.ZoneDesc : null;
        this.FlowMsg = 'FlowMsg' in params ? params.FlowMsg : null;
        this.StatusDesc = 'StatusDesc' in params ? params.StatusDesc : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Monitor = 'Monitor' in params ? params.Monitor : null;
        this.HasClsTopic = 'HasClsTopic' in params ? params.HasClsTopic : null;
        this.ClsTopicId = 'ClsTopicId' in params ? params.ClsTopicId : null;
        this.ClsLogSetId = 'ClsLogSetId' in params ? params.ClsLogSetId : null;
        this.EnableXMLConfig = 'EnableXMLConfig' in params ? params.EnableXMLConfig : null;
        this.RegionDesc = 'RegionDesc' in params ? params.RegionDesc : null;
        this.Eip = 'Eip' in params ? params.Eip : null;
        this.CosMoveFactor = 'CosMoveFactor' in params ? params.CosMoveFactor : null;
        this.Kind = 'Kind' in params ? params.Kind : null;
        this.CosBucketName = 'CosBucketName' in params ? params.CosBucketName : null;
        this.CanAttachCbs = 'CanAttachCbs' in params ? params.CanAttachCbs : null;
        this.BuildVersion = 'BuildVersion' in params ? params.BuildVersion : null;
        this.Components = 'Components' in params ? params.Components : null;
        this.IfExistCatalog = 'IfExistCatalog' in params ? params.IfExistCatalog : null;
        this.Characteristic = 'Characteristic' in params ? params.Characteristic : null;
        this.RestartTimeout = 'RestartTimeout' in params ? params.RestartTimeout : null;
        this.GraceShutdownWaitSeconds = 'GraceShutdownWaitSeconds' in params ? params.GraceShutdownWaitSeconds : null;
        this.CaseSensitive = 'CaseSensitive' in params ? params.CaseSensitive : null;
        this.IsWhiteSGs = 'IsWhiteSGs' in params ? params.IsWhiteSGs : null;
        this.BindSGs = 'BindSGs' in params ? params.BindSGs : null;
        this.EnableMultiZones = 'EnableMultiZones' in params ? params.EnableMultiZones : null;
        this.UserNetworkInfos = 'UserNetworkInfos' in params ? params.UserNetworkInfos : null;
        this.EnableCoolDown = 'EnableCoolDown' in params ? params.EnableCoolDown : null;
        this.CoolDownBucket = 'CoolDownBucket' in params ? params.CoolDownBucket : null;

        if (params.Details) {
            let obj = new InstanceDetail();
            obj.deserialize(params.Details)
            this.Details = obj;
        }
        this.EnableDlc = 'EnableDlc' in params ? params.EnableDlc : null;
        this.AccountType = 'AccountType' in params ? params.AccountType : null;

    }
}

/**
 * DescribeSlowQueryRecords request structure.
 * @class
 */
class DescribeSlowQueryRecordsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Slow log time
         * @type {number || null}
         */
        this.QueryDurationMs = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Paging
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Paging
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.DurationMs = null;

        /**
         * Database name
         * @type {Array.<string> || null}
         */
        this.DbName = null;

        /**
         * Whether it is a query. 0 indicates no, and 1 indicates yes.
         * @type {number || null}
         */
        this.IsQuery = null;

        /**
         * catalog name
         * @type {Array.<string> || null}
         */
        this.CatalogName = null;

        /**
         * SQL name
         * @type {string || null}
         */
        this.Sql = null;

        /**
         * ReadRows sort field
         * @type {string || null}
         */
        this.ReadRows = null;

        /**
         * ResultBytes sort field
         * @type {string || null}
         */
        this.ResultBytes = null;

        /**
         * MemoryUsage sort field
         * @type {string || null}
         */
        this.MemoryUsage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.QueryDurationMs = 'QueryDurationMs' in params ? params.QueryDurationMs : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.DurationMs = 'DurationMs' in params ? params.DurationMs : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.IsQuery = 'IsQuery' in params ? params.IsQuery : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;
        this.Sql = 'Sql' in params ? params.Sql : null;
        this.ReadRows = 'ReadRows' in params ? params.ReadRows : null;
        this.ResultBytes = 'ResultBytes' in params ? params.ResultBytes : null;
        this.MemoryUsage = 'MemoryUsage' in params ? params.MemoryUsage : null;

    }
}

/**
 * CreateTable response structure.
 * @class
 */
class CreateTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserBindWorkloadGroup request structure.
 * @class
 */
class DescribeUserBindWorkloadGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ScaleUpInstance request structure.
 * @class
 */
class ScaleUpInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node specifications
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Role (MATER/CORE). MASTER corresponds to FE, and CORE corresponds to BE.
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * Column information of the table
 * @class
 */
class Column extends  AbstractModel {
    constructor(){
        super();

        /**
         * Column name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Column type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Aggregation type: When the table is an aggregation model (AGG_KEY), the column with the aggregation type is set as the metric column, and other columns are dimension columns. Aggregation type: ●SUM: sum; the values of multiple rows are accumulated. ●REPLACE: replacement; the values in the next batch of data will replace the values in the previously imported rows. ●MAX: retain the maximum value.
 ●MIN: retain the minimum value. ●REPLACE_IF_NOT_NULL: non-null values replacement. The difference from REPLACE is that null values are not replaced. ●HLL_UNION: aggregation method for HLL type columns, which is aggregated by HyperLogLog algorithm. ●BITMAP_UNION: aggregation method for BIMTAP type columns; bitmap union aggregation.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AggType = null;

        /**
         * Whether the column value is allowed to be Null
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsNull = null;

        /**
         * Whether it is a Key column. The meaning of different data models:
●DUP_KEY: The column specified afterwards is the sorting column.
●AGG_KEY: The column specified afterwards is the dimension column.
●UNI_KEY: The column specified afterward is the primary key column.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsKey = null;

        /**
         * Column's default value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DefaultValue = null;

        /**
         * Whether it is a partition column. The partition column must be a Key column.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsPartition = null;

        /**
         * Whether it is a bucket column. The bucket column of the aggregation model and primary key model must be Key columns, while the bucket column of the detail model can be any column.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsDistribution = null;

        /**
         * Whether it is an auto-increment column. Supported by TCHouse-D 2.1 version and later.
Limit:
1. Only DUP_KEY and UNI_KEY model tables can contain auto-increment columns.
2. A table can contain at most one auto-increment column.
3. The type of the auto-increment column must be BIGINT type and cannot be null.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.AutoInc = null;

        /**
         * Column description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Comment = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.AggType = 'AggType' in params ? params.AggType : null;
        this.IsNull = 'IsNull' in params ? params.IsNull : null;
        this.IsKey = 'IsKey' in params ? params.IsKey : null;
        this.DefaultValue = 'DefaultValue' in params ? params.DefaultValue : null;
        this.IsPartition = 'IsPartition' in params ? params.IsPartition : null;
        this.IsDistribution = 'IsDistribution' in params ? params.IsDistribution : null;
        this.AutoInc = 'AutoInc' in params ? params.AutoInc : null;
        this.Comment = 'Comment' in params ? params.Comment : null;

    }
}

/**
 * DescribeBackUpSchedules request structure.
 * @class
 */
class DescribeBackUpSchedulesRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeClusterConfigs request structure.
 * @class
 */
class DescribeClusterConfigsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * 0 indicates public cloud query, and 1 Qinge query. Qinge query shows all that needs to be displayed.
         * @type {number || null}
         */
        this.ConfigType = null;

        /**
         * Search for files with fuzzy keywords
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * 0 indicates cluster dimension and 1 node dimension
         * @type {number || null}
         */
        this.ClusterConfigType = null;

        /**
         * eth0's IP address
         * @type {string || null}
         */
        this.IPAddress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConfigType = 'ConfigType' in params ? params.ConfigType : null;
        this.FileName = 'FileName' in params ? params.FileName : null;
        this.ClusterConfigType = 'ClusterConfigType' in params ? params.ClusterConfigType : null;
        this.IPAddress = 'IPAddress' in params ? params.IPAddress : null;

    }
}

/**
 * ExecuteSelectQuery request structure.
 * @class
 */
class ExecuteSelectQueryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Database = null;

        /**
         * SQL query statements only support select statements.
         * @type {string || null}
         */
        this.Query = null;

        /**
         * InstanceId
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Page number, which is 1 by default.
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Number of records per page, which is 10 by default.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Catalog name, defaults to 'internal' if not specified.

         * @type {string || null}
         */
        this.CatalogName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Database = 'Database' in params ? params.Database : null;
        this.Query = 'Query' in params ? params.Query : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;

    }
}

/**
 * CreateCoolDownPolicy response structure.
 * @class
 */
class CreateCoolDownPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyWorkloadGroup response structure.
 * @class
 */
class ModifyWorkloadGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message	
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRestoreTaskDetail request structure.
 * @class
 */
class DescribeRestoreTaskDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.BackUpJobId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.BackUpJobId = 'BackUpJobId' in params ? params.BackUpJobId : null;

    }
}

/**
 * CreateBackUpSchedule response structure.
 * @class
 */
class CreateBackUpScheduleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDatabaseTableAccess response structure.
 * @class
 */
class ModifyDatabaseTableAccessResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the operation is successful
         * @type {boolean || null}
         */
        this.Success = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Success = 'Success' in params ? params.Success : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstance response structure.
 * @class
 */
class DescribeInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance description information
         * @type {InstanceInfo || null}
         */
        this.InstanceInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceInfo) {
            let obj = new InstanceInfo();
            obj.deserialize(params.InstanceInfo)
            this.InstanceInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeBackUpJob response structure.
 * @class
 */
class DescribeBackUpJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<BackUpJobDisplay> || null}
         */
        this.BackUpJobs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.BackUpJobs) {
            this.BackUpJobs = new Array();
            for (let z in params.BackUpJobs) {
                let obj = new BackUpJobDisplay();
                obj.deserialize(params.BackUpJobs[z]);
                this.BackUpJobs.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDatabase request structure.
 * @class
 */
class DescribeDatabaseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Query the data source where the database is located. If it is not filled in, the internal data source (internal) will be used by default.
         * @type {string || null}
         */
        this.CatalogName = null;

        /**
         * The database information to be queried. If this parameter and FilterDbName are not filled in, all database information of the current data source will be queried by default.
         * @type {Array.<string> || null}
         */
        this.DbNames = null;

        /**
         * Display the filtered database information. For example, %infor indicates database names ending with infor. This parameter only supports scenarios where CatalogName is internal.
         * @type {string || null}
         */
        this.FilterDbName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;
        this.DbNames = 'DbNames' in params ? params.DbNames : null;
        this.FilterDbName = 'FilterDbName' in params ? params.FilterDbName : null;

    }
}

/**
 * RestartClusterForNode request structure.
 * @class
 */
class RestartClusterForNodeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID, such as cdwch-xxxx
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Configuration file's name
         * @type {string || null}
         */
        this.ConfigName = null;

        /**
         * Each batch of restarts
         * @type {number || null}
         */
        this.BatchSize = null;

        /**
         * Restart node
         * @type {Array.<string> || null}
         */
        this.NodeList = null;

        /**
         * False means non-rolling restart, and true means rolling restart.
         * @type {boolean || null}
         */
        this.RollingRestart = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConfigName = 'ConfigName' in params ? params.ConfigName : null;
        this.BatchSize = 'BatchSize' in params ? params.BatchSize : null;
        this.NodeList = 'NodeList' in params ? params.NodeList : null;
        this.RollingRestart = 'RollingRestart' in params ? params.RollingRestart : null;

    }
}

/**
 * UpdateCoolDown response structure.
 * @class
 */
class UpdateCoolDownResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Progress details of the backup task
 * @class
 */
class BackupStatus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Backup task ID
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * Snapshot name
         * @type {string || null}
         */
        this.SnapshotName = null;

        /**
         * Database name
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Status
         * @type {string || null}
         */
        this.State = null;

        /**
         * Backup object
         * @type {string || null}
         */
        this.BackupObjects = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Snapshot end time
         * @type {string || null}
         */
        this.SnapshotFinishedTime = null;

        /**
         * Upload end time
         * @type {string || null}
         */
        this.UploadFinishedTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.FinishedTime = null;

        /**
         * Unfinished tasks
         * @type {string || null}
         */
        this.UnfinishedTasks = null;

        /**
         * Progress
         * @type {string || null}
         */
        this.Progress = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.TaskErrMsg = null;

        /**
         * Status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Timeout information
         * @type {number || null}
         */
        this.Timeout = null;

        /**
         * Backup instance ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupJobId = null;

        /**
         * The ID of the snapshoit corresponding to the instance
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.SnapshotName = 'SnapshotName' in params ? params.SnapshotName : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.State = 'State' in params ? params.State : null;
        this.BackupObjects = 'BackupObjects' in params ? params.BackupObjects : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.SnapshotFinishedTime = 'SnapshotFinishedTime' in params ? params.SnapshotFinishedTime : null;
        this.UploadFinishedTime = 'UploadFinishedTime' in params ? params.UploadFinishedTime : null;
        this.FinishedTime = 'FinishedTime' in params ? params.FinishedTime : null;
        this.UnfinishedTasks = 'UnfinishedTasks' in params ? params.UnfinishedTasks : null;
        this.Progress = 'Progress' in params ? params.Progress : null;
        this.TaskErrMsg = 'TaskErrMsg' in params ? params.TaskErrMsg : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Timeout = 'Timeout' in params ? params.Timeout : null;
        this.BackupJobId = 'BackupJobId' in params ? params.BackupJobId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * The searched marker list on the list page
 * @class
 */
class SearchTags extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value
         * @type {string || null}
         */
        this.TagValue = null;

        /**
         * 1 means only the tag key is entered without a value, and 0 means both the key and the value are entered.
         * @type {number || null}
         */
        this.AllValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;
        this.AllValue = 'AllValue' in params ? params.AllValue : null;

    }
}

/**
 * Add or modify the user
 * @class
 */
class UserInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Username
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * The IP address of the user link
         * @type {string || null}
         */
        this.WhiteHost = null;

        /**
         * IP address of the user link before modification
         * @type {string || null}
         */
        this.OldWhiteHost = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Describe = null;

        /**
         * Original password
         * @type {string || null}
         */
        this.OldPwd = null;

        /**
         * UIN of the bound sub-user
         * @type {string || null}
         */
        this.CamUin = null;

        /**
         * Ranger group id list
         * @type {Array.<number> || null}
         */
        this.CamRangerGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.WhiteHost = 'WhiteHost' in params ? params.WhiteHost : null;
        this.OldWhiteHost = 'OldWhiteHost' in params ? params.OldWhiteHost : null;
        this.Describe = 'Describe' in params ? params.Describe : null;
        this.OldPwd = 'OldPwd' in params ? params.OldPwd : null;
        this.CamUin = 'CamUin' in params ? params.CamUin : null;
        this.CamRangerGroupIds = 'CamRangerGroupIds' in params ? params.CamRangerGroupIds : null;

    }
}

/**
 * DescribeInstanceUsedSubnets request structure.
 * @class
 */
class DescribeInstanceUsedSubnetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * List type partition information
 * @class
 */
class ListInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Partition name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PartitionName = null;

        /**
         * Enumeration values of each partition column

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.EnumValues = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PartitionName = 'PartitionName' in params ? params.PartitionName : null;
        this.EnumValues = 'EnumValues' in params ? params.EnumValues : null;

    }
}

/**
 * QueryTableData request structure.
 * @class
 */
class QueryTableDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Table name
         * @type {string || null}
         */
        this.Table = null;

        /**
         * InstanceId
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Array of fields to be queried
         * @type {Array.<string> || null}
         */
        this.SelectedFields = null;

        /**
         * Page number, which is 1 by default.
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Number of records per page, which is 10 by default.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Catalog name, defaults to 'internal' if not specified.

         * @type {string || null}
         */
        this.CatalogName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Database = 'Database' in params ? params.Database : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SelectedFields = 'SelectedFields' in params ? params.SelectedFields : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;

    }
}

/**
 * DescribeDatabaseAuditRecords request structure.
 * @class
 */
class DescribeDatabaseAuditRecordsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Paging
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Paging
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Sort parameters
         * @type {string || null}
         */
        this.OrderType = null;

        /**
         * User
         * @type {string || null}
         */
        this.User = null;

        /**
         * Database
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * SQL type
         * @type {string || null}
         */
        this.SqlType = null;

        /**
         * SQL statement
         * @type {string || null}
         */
        this.Sql = null;

        /**
         * Users (multiple selections)
         * @type {Array.<string> || null}
         */
        this.Users = null;

        /**
         * Databases (multiple selections)
         * @type {Array.<string> || null}
         */
        this.DbNames = null;

        /**
         * SQL types (multiple selections)
         * @type {Array.<string> || null}
         */
        this.SqlTypes = null;

        /**
         * Catalog names (multiple selections)
         * @type {Array.<string> || null}
         */
        this.Catalogs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.OrderType = 'OrderType' in params ? params.OrderType : null;
        this.User = 'User' in params ? params.User : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.SqlType = 'SqlType' in params ? params.SqlType : null;
        this.Sql = 'Sql' in params ? params.Sql : null;
        this.Users = 'Users' in params ? params.Users : null;
        this.DbNames = 'DbNames' in params ? params.DbNames : null;
        this.SqlTypes = 'SqlTypes' in params ? params.SqlTypes : null;
        this.Catalogs = 'Catalogs' in params ? params.Catalogs : null;

    }
}

/**
 * DescribeUserPolicy request structure.
 * @class
 */
class DescribeUserPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * You can specify one IP address or specify a percent sign (%) to indicate no limit.
         * @type {string || null}
         */
        this.WhiteHost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.WhiteHost = 'WhiteHost' in params ? params.WhiteHost : null;

    }
}

/**
 * DescribeBackUpJobDetail response structure.
 * @class
 */
class DescribeBackUpJobDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Backup table details
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<BackupTableContent> || null}
         */
        this.TableContents = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TableContents) {
            this.TableContents = new Array();
            for (let z in params.TableContents) {
                let obj = new BackupTableContent();
                obj.deserialize(params.TableContents[z]);
                this.TableContents.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeBackUpJobDetail request structure.
 * @class
 */
class DescribeBackUpJobDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.BackUpJobId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.BackUpJobId = 'BackUpJobId' in params ? params.BackUpJobId : null;

    }
}

/**
 * DescribeCoolDownBackends response structure.
 * @class
 */
class DescribeCoolDownBackendsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * Node information list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CoolDownBackend> || null}
         */
        this.List = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new CoolDownBackend();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCoolDownPolicies response structure.
 * @class
 */
class DescribeCoolDownPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * List of hot/cold data layering policies
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CoolDownPolicyInfo> || null}
         */
        this.List = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new CoolDownPolicyInfo();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTableList request structure.
 * @class
 */
class DescribeTableListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Database for obtaining the list of tables
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Query the data source where the database is located. If it is not filled in, the internal data source (internal) will be used by default.
         * @type {string || null}
         */
        this.CatalogName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;

    }
}

/**
 * DescribeWorkloadGroup response structure.
 * @class
 */
class DescribeWorkloadGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource group information
         * @type {Array.<WorkloadGroupConfig> || null}
         */
        this.WorkloadGroups = null;

        /**
         * Whether to enable the resource group: open and close
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.WorkloadGroups) {
            this.WorkloadGroups = new Array();
            for (let z in params.WorkloadGroups) {
                let obj = new WorkloadGroupConfig();
                obj.deserialize(params.WorkloadGroups[z]);
                this.WorkloadGroups.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information on the table containing layered cold and hot data
 * @class
 */
class CoolDownTableDataInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Column: DatabaseName
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Column: TableName
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Column: Size
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Size = null;

        /**
         * Column: RemoteSize
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RemoteSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.RemoteSize = 'RemoteSize' in params ? params.RemoteSize : null;

    }
}

/**
 * ModifySecurityGroups response structure.
 * @class
 */
class ModifySecurityGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTable request structure.
 * @class
 */
class DescribeTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID, which is the TCHouse-D resource ID used for table creation.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Name of database where the table is located
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Table name (Currently only internal tables are supported.)
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;

    }
}

/**
 * DescribeSpec request structure.
 * @class
 */
class DescribeSpecRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region information, such as ap-guangzhou-1.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Billing type. PREPAID: annual/monthly package; POSTPAID_BY_HOUR: pay-as-you-go
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Multi-availability zone
         * @type {Array.<string> || null}
         */
        this.Zones = null;

        /**
         * Model name
         * @type {string || null}
         */
        this.SpecName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.Zones = 'Zones' in params ? params.Zones : null;
        this.SpecName = 'SpecName' in params ? params.SpecName : null;

    }
}

/**
 * Information on the backend node supporting hot/cold data layering
 * @class
 */
class CoolDownBackend extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field: Host
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Host = null;

        /**
         * Field: DataUsedCapacity
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataUsedCapacity = null;

        /**
         * Field: TotalCapacity
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TotalCapacity = null;

        /**
         * Field: RemoteUsedCapacity
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RemoteUsedCapacity = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Host = 'Host' in params ? params.Host : null;
        this.DataUsedCapacity = 'DataUsedCapacity' in params ? params.DataUsedCapacity : null;
        this.TotalCapacity = 'TotalCapacity' in params ? params.TotalCapacity : null;
        this.RemoteUsedCapacity = 'RemoteUsedCapacity' in params ? params.RemoteUsedCapacity : null;

    }
}

/**
 * DescribeBackUpTaskDetail response structure.
 * @class
 */
class DescribeBackUpTaskDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Progress details of the backup task
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<BackupStatus> || null}
         */
        this.BackupStatus = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.BackupStatus) {
            this.BackupStatus = new Array();
            for (let z in params.BackupStatus) {
                let obj = new BackupStatus();
                obj.deserialize(params.BackupStatus[z]);
                this.BackupStatus.push(obj);
            }
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Database permission
 * @class
 */
class DatabasePermissions extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Permission name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Permissions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.Permissions = 'Permissions' in params ? params.Permissions : null;

    }
}

/**
 * ReduceInstance request structure.
 * @class
 */
class ReduceInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node list
         * @type {Array.<string> || null}
         */
        this.DelHosts = null;

        /**
         * Role (MATER/CORE), MASTER corresponds to FE, CORE corresponds to BE.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * High availability cluster type after scale-in. 0: non-high availability; 1: read high availability; 2: read-write high availability
         * @type {number || null}
         */
        this.HaType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DelHosts = 'DelHosts' in params ? params.DelHosts : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.HaType = 'HaType' in params ? params.HaType : null;

    }
}

/**
 * InsertDatasToTable response structure.
 * @class
 */
class InsertDatasToTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the insertion operation is successful
         * @type {boolean || null}
         */
        this.Success = null;

        /**
         * Message description of the operation result
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Number of inserted data rows
         * @type {number || null}
         */
        this.InsertCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Success = 'Success' in params ? params.Success : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.InsertCount = 'InsertCount' in params ? params.InsertCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteWorkloadGroup response structure.
 * @class
 */
class DeleteWorkloadGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateDatabase response structure.
 * @class
 */
class UpdateDatabaseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the operation is successful
         * @type {boolean || null}
         */
        this.Success = null;

        /**
         * Message description of the operation result
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Success = 'Success' in params ? params.Success : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceOperationHistory request structure.
 * @class
 */
class DescribeInstanceOperationHistoryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Page number, which is 1 by default.
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Number of records per page, which is 10 by default.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;

    }
}

/**
 * DescribeCoolDownTableData response structure.
 * @class
 */
class DescribeCoolDownTableDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * List of tables containing layered hot and cold data
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CoolDownTableDataInfo> || null}
         */
        this.List = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new CoolDownTableDataInfo();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeQueryAnalyse response structure.
 * @class
 */
class DescribeQueryAnalyseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query details
         * @type {Array.<QueryDetails> || null}
         */
        this.QueryDetails = null;

        /**
         * Total number of records
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Current page
         * @type {number || null}
         */
        this.CurrentPage = null;

        /**
         * Number of records per page
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Total pages
         * @type {number || null}
         */
        this.TotalPages = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.QueryDetails) {
            this.QueryDetails = new Array();
            for (let z in params.QueryDetails) {
                let obj = new QueryDetails();
                obj.deserialize(params.QueryDetails[z]);
                this.QueryDetails.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.CurrentPage = 'CurrentPage' in params ? params.CurrentPage : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.TotalPages = 'TotalPages' in params ? params.TotalPages : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Index information of the table
 * @class
 */
class IndexInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Index name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IdxName = null;

        /**
         * Column name for creating the index
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ColumnName = null;

        /**
         * Index type:
INVERTED: inverted index
NGRAM_BF: N-Gram index

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IdxType = null;

        /**
         * Index attributes
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Property> || null}
         */
        this.IdxProperties = null;

        /**
         * Index description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IdxComment = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IdxName = 'IdxName' in params ? params.IdxName : null;
        this.ColumnName = 'ColumnName' in params ? params.ColumnName : null;
        this.IdxType = 'IdxType' in params ? params.IdxType : null;

        if (params.IdxProperties) {
            this.IdxProperties = new Array();
            for (let z in params.IdxProperties) {
                let obj = new Property();
                obj.deserialize(params.IdxProperties[z]);
                this.IdxProperties.push(obj);
            }
        }
        this.IdxComment = 'IdxComment' in params ? params.IdxComment : null;

    }
}

/**
 * ModifyWorkloadGroupStatus response structure.
 * @class
 */
class ModifyWorkloadGroupStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message	
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * OpenCoolDownPolicy response structure.
 * @class
 */
class OpenCoolDownPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * Returned information
         * @type {string || null}
         */
        this.QueryDocument = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.QueryDocument = 'QueryDocument' in params ? params.QueryDocument : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ExecuteParametrizedQuery request structure.
 * @class
 */
class ExecuteParametrizedQueryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Database = null;

        /**
         * SQL query statement
         * @type {string || null}
         */
        this.Sql = null;

        /**
         * InstanceId
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Query parameter array.
         * @type {Array.<PropertiesMap> || null}
         */
        this.QueryParameter = null;

        /**
         * Page number, which is 1 by default.
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Number of records per page, which is 10 by default.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Use the user who has corresponding permissions for operations. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password corresponding to the user. If the TCHouse-D cluster uses a kernel account registered by a CAM user, you do not need to fill it in.
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * Catalog name, defaults to 'internal' if not specified.
         * @type {string || null}
         */
        this.CatalogName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Database = 'Database' in params ? params.Database : null;
        this.Sql = 'Sql' in params ? params.Sql : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.QueryParameter) {
            this.QueryParameter = new Array();
            for (let z in params.QueryParameter) {
                let obj = new PropertiesMap();
                obj.deserialize(params.QueryParameter[z]);
                this.QueryParameter.push(obj);
            }
        }
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.CatalogName = 'CatalogName' in params ? params.CatalogName : null;

    }
}

/**
 * Configuration file modification information
 * @class
 */
class ConfigSubmitContext extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration file's name
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * New Base64-encoded content of the configuration file
         * @type {string || null}
         */
        this.NewConfValue = null;

        /**
         * Original Base64-encoded content of the configuration file
         * @type {string || null}
         */
        this.OldConfValue = null;

        /**
         * File path
         * @type {string || null}
         */
        this.FilePath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FileName = 'FileName' in params ? params.FileName : null;
        this.NewConfValue = 'NewConfValue' in params ? params.NewConfValue : null;
        this.OldConfValue = 'OldConfValue' in params ? params.OldConfValue : null;
        this.FilePath = 'FilePath' in params ? params.FilePath : null;

    }
}

/**
 * DescribeInstances request structure.
 * @class
 */
class DescribeInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The name of the cluster ID for the search
         * @type {string || null}
         */
        this.SearchInstanceId = null;

        /**
         * The cluster name for the search
         * @type {string || null}
         */
        this.SearchInstanceName = null;

        /**
         * Pagination parameters. The first page is 0, and the second page is 10.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination parameters. The pagination step length is 10 by default.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Search tag list
         * @type {Array.<SearchTags> || null}
         */
        this.SearchTags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SearchInstanceId = 'SearchInstanceId' in params ? params.SearchInstanceId : null;
        this.SearchInstanceName = 'SearchInstanceName' in params ? params.SearchInstanceName : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.SearchTags) {
            this.SearchTags = new Array();
            for (let z in params.SearchTags) {
                let obj = new SearchTags();
                obj.deserialize(params.SearchTags[z]);
                this.SearchTags.push(obj);
            }
        }

    }
}

/**
 * Region description information
 * @class
 */
class RegionInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region name, such as ap-guangzhou
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Region description, such as Guangzhou
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Unique marker of region
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * List of all availability zones in the region
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ZoneInfo> || null}
         */
        this.Zones = null;

        /**
         * Number of clusters in the region
         * @type {number || null}
         */
        this.Count = null;

        /**
         * 0 indicates the international site; 1 indicates not.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsInternationalSite = null;

        /**
         * Bucket
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Bucket = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Desc = 'Desc' in params ? params.Desc : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

        if (params.Zones) {
            this.Zones = new Array();
            for (let z in params.Zones) {
                let obj = new ZoneInfo();
                obj.deserialize(params.Zones[z]);
                this.Zones.push(obj);
            }
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.IsInternationalSite = 'IsInternationalSite' in params ? params.IsInternationalSite : null;
        this.Bucket = 'Bucket' in params ? params.Bucket : null;

    }
}

/**
 * Multiple rows of data
 * @class
 */
class Rows extends  AbstractModel {
    constructor(){
        super();

        /**
         * A row of data
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DataRow = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataRow = 'DataRow' in params ? params.DataRow : null;

    }
}

/**
 * RestartClusterForConfigs request structure.
 * @class
 */
class RestartClusterForConfigsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID, such as cdwch-xxxx
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Configuration file's name
         * @type {string || null}
         */
        this.ConfigName = null;

        /**
         * grace_restart is an elegant scrolling restart. If this parameter is not filled in, restart now by default.
         * @type {string || null}
         */
        this.OperationType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConfigName = 'ConfigName' in params ? params.ConfigName : null;
        this.OperationType = 'OperationType' in params ? params.OperationType : null;

    }
}

/**
 * CreateWorkloadGroup response structure.
 * @class
 */
class CreateWorkloadGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceState response structure.
 * @class
 */
class DescribeInstanceStateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster status. Example: Serving
         * @type {string || null}
         */
        this.InstanceState = null;

        /**
         * Creation time of cluster operation
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowCreateTime = null;

        /**
         * Cluster operation name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowName = null;

        /**
         * Cluster operation progress
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FlowProgress = null;

        /**
         * Cluster status description. Example: running
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceStateDesc = null;

        /**
         * Cluster process error messages, such as "Creation failed, insufficient resources"
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceState = 'InstanceState' in params ? params.InstanceState : null;
        this.FlowCreateTime = 'FlowCreateTime' in params ? params.FlowCreateTime : null;
        this.FlowName = 'FlowName' in params ? params.FlowName : null;
        this.FlowProgress = 'FlowProgress' in params ? params.FlowProgress : null;
        this.InstanceStateDesc = 'InstanceStateDesc' in params ? params.InstanceStateDesc : null;
        this.FlowMsg = 'FlowMsg' in params ? params.FlowMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDatabase response structure.
 * @class
 */
class CreateDatabaseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Property attribute
 * @class
 */
class PropertiesMap extends  AbstractModel {
    constructor(){
        super();

        /**
         * key
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PropertyKey = null;

        /**
         * value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PropertyValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PropertyKey = 'PropertyKey' in params ? params.PropertyKey : null;
        this.PropertyValue = 'PropertyValue' in params ? params.PropertyValue : null;

    }
}

/**
 * DescribeCoolDownPolicies request structure.
 * @class
 */
class DescribeCoolDownPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Resource specification description information
 * @class
 */
class ResourceSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specification name, such as SCH1
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Number of CPU cores
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Memory size, in GB
         * @type {number || null}
         */
        this.Mem = null;

        /**
         * Classification markers, STANDARD/BIGDATA/HIGHIO respectively represent standard type/big data type/high IO.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * System disk description information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DiskSpec || null}
         */
        this.SystemDisk = null;

        /**
         * Data disk description information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DiskSpec || null}
         */
        this.DataDisk = null;

        /**
         * Limit of the maximum number of nodes
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxNodeSize = null;

        /**
         * Whether it is available. False indicates sell-out.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Available = null;

        /**
         * Specification description information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ComputeSpecDesc = null;

        /**
         * CVM inventory
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InstanceQuota = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.Mem = 'Mem' in params ? params.Mem : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.SystemDisk) {
            let obj = new DiskSpec();
            obj.deserialize(params.SystemDisk)
            this.SystemDisk = obj;
        }

        if (params.DataDisk) {
            let obj = new DiskSpec();
            obj.deserialize(params.DataDisk)
            this.DataDisk = obj;
        }
        this.MaxNodeSize = 'MaxNodeSize' in params ? params.MaxNodeSize : null;
        this.Available = 'Available' in params ? params.Available : null;
        this.ComputeSpecDesc = 'ComputeSpecDesc' in params ? params.ComputeSpecDesc : null;
        this.InstanceQuota = 'InstanceQuota' in params ? params.InstanceQuota : null;

    }
}

/**
 * ModifyClusterConfigs response structure.
 * @class
 */
class ModifyClusterConfigsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process related information
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Recover the task information
 * @class
 */
class RestoreStatus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Recover the task ID
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * Recover the task tag
         * @type {string || null}
         */
        this.Label = null;

        /**
         * Recover the task timestamp
         * @type {string || null}
         */
        this.Timestamp = null;

        /**
         * Recover the database where the task is located
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Recover the task status
         * @type {string || null}
         */
        this.State = null;

        /**
         * Whether to allow import during recovery
         * @type {boolean || null}
         */
        this.AllowLoad = null;

        /**
         * Number of replicas
         * @type {string || null}
         */
        this.ReplicationNum = null;

        /**
         * Number of replicas
         * @type {string || null}
         */
        this.ReplicaAllocation = null;

        /**
         * Recover object
         * @type {string || null}
         */
        this.RestoreObjects = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Metadata preparation time
         * @type {string || null}
         */
        this.MetaPreparedTime = null;

        /**
         * Snapshot end time
         * @type {string || null}
         */
        this.SnapshotFinishedTime = null;

        /**
         * Download end time
         * @type {string || null}
         */
        this.DownloadFinishedTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.FinishedTime = null;

        /**
         * Unfinished tasks
         * @type {string || null}
         */
        this.UnfinishedTasks = null;

        /**
         * Progress
         * @type {string || null}
         */
        this.Progress = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.TaskErrMsg = null;

        /**
         * Status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operation timeout period
         * @type {number || null}
         */
        this.Timeout = null;

        /**
         * Whether to maintain the number of replicas in the source table
         * @type {boolean || null}
         */
        this.ReserveReplica = null;

        /**
         * Whether to maintain dynamic partitions in the source table
         * @type {boolean || null}
         */
        this.ReserveDynamicPartitionEnable = null;

        /**
         * Backup instance ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupJobId = null;

        /**
         * ID of the snapshot corresponding to the instance
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.Label = 'Label' in params ? params.Label : null;
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.State = 'State' in params ? params.State : null;
        this.AllowLoad = 'AllowLoad' in params ? params.AllowLoad : null;
        this.ReplicationNum = 'ReplicationNum' in params ? params.ReplicationNum : null;
        this.ReplicaAllocation = 'ReplicaAllocation' in params ? params.ReplicaAllocation : null;
        this.RestoreObjects = 'RestoreObjects' in params ? params.RestoreObjects : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.MetaPreparedTime = 'MetaPreparedTime' in params ? params.MetaPreparedTime : null;
        this.SnapshotFinishedTime = 'SnapshotFinishedTime' in params ? params.SnapshotFinishedTime : null;
        this.DownloadFinishedTime = 'DownloadFinishedTime' in params ? params.DownloadFinishedTime : null;
        this.FinishedTime = 'FinishedTime' in params ? params.FinishedTime : null;
        this.UnfinishedTasks = 'UnfinishedTasks' in params ? params.UnfinishedTasks : null;
        this.Progress = 'Progress' in params ? params.Progress : null;
        this.TaskErrMsg = 'TaskErrMsg' in params ? params.TaskErrMsg : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Timeout = 'Timeout' in params ? params.Timeout : null;
        this.ReserveReplica = 'ReserveReplica' in params ? params.ReserveReplica : null;
        this.ReserveDynamicPartitionEnable = 'ReserveDynamicPartitionEnable' in params ? params.ReserveDynamicPartitionEnable : null;
        this.BackupJobId = 'BackupJobId' in params ? params.BackupJobId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * DeleteBackUpData response structure.
 * @class
 */
class DeleteBackUpDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstanceKeyValConfigs request structure.
 * @class
 */
class ModifyInstanceKeyValConfigsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * File name
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * Add configuration list
         * @type {Array.<InstanceConfigItem> || null}
         */
        this.AddItems = null;

        /**
         * Update configuration list
         * @type {Array.<InstanceConfigItem> || null}
         */
        this.UpdateItems = null;

        /**
         * Delete configuration list
         * @type {Array.<InstanceConfigItem> || null}
         */
        this.DelItems = null;

        /**
         * Remarks (within 50 words)
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Hot update list
         * @type {Array.<InstanceConfigItem> || null}
         */
        this.HotUpdateItems = null;

        /**
         * Delete configuration list
         * @type {InstanceConfigItem || null}
         */
        this.DeleteItems = null;

        /**
         * IP address
         * @type {string || null}
         */
        this.IPAddress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.FileName = 'FileName' in params ? params.FileName : null;

        if (params.AddItems) {
            this.AddItems = new Array();
            for (let z in params.AddItems) {
                let obj = new InstanceConfigItem();
                obj.deserialize(params.AddItems[z]);
                this.AddItems.push(obj);
            }
        }

        if (params.UpdateItems) {
            this.UpdateItems = new Array();
            for (let z in params.UpdateItems) {
                let obj = new InstanceConfigItem();
                obj.deserialize(params.UpdateItems[z]);
                this.UpdateItems.push(obj);
            }
        }

        if (params.DelItems) {
            this.DelItems = new Array();
            for (let z in params.DelItems) {
                let obj = new InstanceConfigItem();
                obj.deserialize(params.DelItems[z]);
                this.DelItems.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;

        if (params.HotUpdateItems) {
            this.HotUpdateItems = new Array();
            for (let z in params.HotUpdateItems) {
                let obj = new InstanceConfigItem();
                obj.deserialize(params.HotUpdateItems[z]);
                this.HotUpdateItems.push(obj);
            }
        }

        if (params.DeleteItems) {
            let obj = new InstanceConfigItem();
            obj.deserialize(params.DeleteItems)
            this.DeleteItems = obj;
        }
        this.IPAddress = 'IPAddress' in params ? params.IPAddress : null;

    }
}

/**
 * Backup instance details
 * @class
 */
class BackUpJobDisplay extends  AbstractModel {
    constructor(){
        super();

        /**
         * Backup instance ID
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * Backup instance name
         * @type {string || null}
         */
        this.Snapshot = null;

        /**
         * Backup data volume
         * @type {number || null}
         */
        this.BackUpSize = null;

        /**
         * Backup single replica data volume
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackUpSingleSize = null;

        /**
         * Instance creation time
         * @type {string || null}
         */
        this.BackUpTime = null;

        /**
         * Instance expiration time
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Instance status
         * @type {string || null}
         */
        this.JobStatus = null;

        /**
         * 0: default; 1: one-time backup for the remote Doris
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupType = null;

        /**
         * 0: default; 1: immediate backup; 2: migration
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupTimeType = null;

        /**
         * Connection information of the remote Doris
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DorisSourceInfo || null}
         */
        this.DorisSourceInfo = null;

        /**
         * The value corresponding to the instance status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.JobStatusNum = null;

        /**
         * Information about cos in the backup instance	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {BackupCosInfo || null}
         */
        this.BackupCosInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.Snapshot = 'Snapshot' in params ? params.Snapshot : null;
        this.BackUpSize = 'BackUpSize' in params ? params.BackUpSize : null;
        this.BackUpSingleSize = 'BackUpSingleSize' in params ? params.BackUpSingleSize : null;
        this.BackUpTime = 'BackUpTime' in params ? params.BackUpTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.JobStatus = 'JobStatus' in params ? params.JobStatus : null;
        this.BackupType = 'BackupType' in params ? params.BackupType : null;
        this.BackupTimeType = 'BackupTimeType' in params ? params.BackupTimeType : null;

        if (params.DorisSourceInfo) {
            let obj = new DorisSourceInfo();
            obj.deserialize(params.DorisSourceInfo)
            this.DorisSourceInfo = obj;
        }
        this.JobStatusNum = 'JobStatusNum' in params ? params.JobStatusNum : null;

        if (params.BackupCosInfo) {
            let obj = new BackupCosInfo();
            obj.deserialize(params.BackupCosInfo)
            this.BackupCosInfo = obj;
        }

    }
}

/**
 * ModifyUserBindWorkloadGroup response structure.
 * @class
 */
class ModifyUserBindWorkloadGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * It is used to return configuration files and content in XML format, as well as other information related to the configuration files.
 * @class
 */
class ClusterConfigsInfoFromEMR extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration file's name
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * Related attribute information corresponding to the configuration files
         * @type {string || null}
         */
        this.FileConf = null;

        /**
         * Other attribute information corresponding to the configuration files
         * @type {string || null}
         */
        this.KeyConf = null;

        /**
         * Contents of the configuration files, base64 encoded
         * @type {string || null}
         */
        this.OriParam = null;

        /**
         * This is used to indicate whether the current configuration file has been modified without a restart, and reminds the user that a restart is needed.
         * @type {number || null}
         */
        this.NeedRestart = null;

        /**
         * Configuration file path
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FilePath = null;

        /**
         * kv value of a configuration file
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FileKeyValues = null;

        /**
         * kv value of a configuration file
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ConfigKeyValue> || null}
         */
        this.FileKeyValuesNew = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FileName = 'FileName' in params ? params.FileName : null;
        this.FileConf = 'FileConf' in params ? params.FileConf : null;
        this.KeyConf = 'KeyConf' in params ? params.KeyConf : null;
        this.OriParam = 'OriParam' in params ? params.OriParam : null;
        this.NeedRestart = 'NeedRestart' in params ? params.NeedRestart : null;
        this.FilePath = 'FilePath' in params ? params.FilePath : null;
        this.FileKeyValues = 'FileKeyValues' in params ? params.FileKeyValues : null;

        if (params.FileKeyValuesNew) {
            this.FileKeyValuesNew = new Array();
            for (let z in params.FileKeyValuesNew) {
                let obj = new ConfigKeyValue();
                obj.deserialize(params.FileKeyValuesNew[z]);
                this.FileKeyValuesNew.push(obj);
            }
        }

    }
}

/**
 * RecoverBackUpJob response structure.
 * @class
 */
class RecoverBackUpJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTable response structure.
 * @class
 */
class DescribeTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.KeysType = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Column> || null}
         */
        this.Columns = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<IndexInfo> || null}
         */
        this.IndexInfos = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Partition || null}
         */
        this.Partition = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Distribution || null}
         */
        this.Distribution = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableComment = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.KeysType = 'KeysType' in params ? params.KeysType : null;

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new Column();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }

        if (params.IndexInfos) {
            this.IndexInfos = new Array();
            for (let z in params.IndexInfos) {
                let obj = new IndexInfo();
                obj.deserialize(params.IndexInfos[z]);
                this.IndexInfos.push(obj);
            }
        }

        if (params.Partition) {
            let obj = new Partition();
            obj.deserialize(params.Partition)
            this.Partition = obj;
        }

        if (params.Distribution) {
            let obj = new Distribution();
            obj.deserialize(params.Distribution)
            this.Distribution = obj;
        }
        this.TableComment = 'TableComment' in params ? params.TableComment : null;

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTableList response structure.
 * @class
 */
class DescribeTableListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of table names
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.TableNames = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TableNames = 'TableNames' in params ? params.TableNames : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserBindWorkloadGroup request structure.
 * @class
 */
class ModifyUserBindWorkloadGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The user information of the resource group needs to be bound. If an account has information of multiple hosts, all information needs to be uploaded.
         * @type {Array.<BindUser> || null}
         */
        this.BindUsers = null;

        /**
         * Name of the resource group bound before modification
         * @type {string || null}
         */
        this.OldWorkloadGroupName = null;

        /**
         * Name of the resource group bound after modification
         * @type {string || null}
         */
        this.NewWorkloadGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.BindUsers) {
            this.BindUsers = new Array();
            for (let z in params.BindUsers) {
                let obj = new BindUser();
                obj.deserialize(params.BindUsers[z]);
                this.BindUsers.push(obj);
            }
        }
        this.OldWorkloadGroupName = 'OldWorkloadGroupName' in params ? params.OldWorkloadGroupName : null;
        this.NewWorkloadGroupName = 'NewWorkloadGroupName' in params ? params.NewWorkloadGroupName : null;

    }
}

/**
 * Node role description information
 * @class
 */
class NodesSummary extends  AbstractModel {
    constructor(){
        super();

        /**
         * Model, such as S1
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Number of nodes
         * @type {number || null}
         */
        this.NodeSize = null;

        /**
         * Number of CPU cores, in counts
         * @type {number || null}
         */
        this.Core = null;

        /**
         * Memory size, in GB
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * Disk size, in GB
         * @type {number || null}
         */
        this.Disk = null;

        /**
         * Disk type
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Disk description
         * @type {string || null}
         */
        this.DiskDesc = null;

        /**
         * Information of mounted cloud disks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {AttachCBSSpec || null}
         */
        this.AttachCBSSpec = null;

        /**
         * Sub-product name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubProductType = null;

        /**
         * Specified cores
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SpecCore = null;

        /**
         * Specified memory
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SpecMemory = null;

        /**
         * Disk size
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskCount = null;

        /**
         * Whether it is encrypted.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Encrypt = null;

        /**
         * Maximum disk
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxDiskSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.NodeSize = 'NodeSize' in params ? params.NodeSize : null;
        this.Core = 'Core' in params ? params.Core : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.Disk = 'Disk' in params ? params.Disk : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskDesc = 'DiskDesc' in params ? params.DiskDesc : null;

        if (params.AttachCBSSpec) {
            let obj = new AttachCBSSpec();
            obj.deserialize(params.AttachCBSSpec)
            this.AttachCBSSpec = obj;
        }
        this.SubProductType = 'SubProductType' in params ? params.SubProductType : null;
        this.SpecCore = 'SpecCore' in params ? params.SpecCore : null;
        this.SpecMemory = 'SpecMemory' in params ? params.SpecMemory : null;
        this.DiskCount = 'DiskCount' in params ? params.DiskCount : null;
        this.Encrypt = 'Encrypt' in params ? params.Encrypt : null;
        this.MaxDiskSize = 'MaxDiskSize' in params ? params.MaxDiskSize : null;

    }
}

/**
 * Cluster specifications
 * @class
 */
class CreateInstanceSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specification name
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Quantities
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Cloud disk size
         * @type {number || null}
         */
        this.DiskSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;

    }
}

/**
 * Database and table information
 * @class
 */
class DbTablesInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * The corresponding table list under this database.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.TablesName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.TablesName = 'TablesName' in params ? params.TablesName : null;

    }
}

/**
 * DescribeInstance request structure.
 * @class
 */
class DescribeInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeBackUpJob request structure.
 * @class
 */
class DescribeBackUpJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Pagination size
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Page number
         * @type {number || null}
         */
        this.PageNum = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.BeginTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * String type of jobid
         * @type {string || null}
         */
        this.JobIdFiltersStr = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.PageNum = 'PageNum' in params ? params.PageNum : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.JobIdFiltersStr = 'JobIdFiltersStr' in params ? params.JobIdFiltersStr : null;

    }
}

/**
 * ActionAlterUser request structure.
 * @class
 */
class ActionAlterUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User information
         * @type {UserInfo || null}
         */
        this.UserInfo = null;

        /**
         * API type
         * @type {string || null}
         */
        this.ApiType = null;

        /**
         * User permission type. 0: ordinary user; 1: administrator.
         * @type {number || null}
         */
        this.UserPrivilege = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserInfo) {
            let obj = new UserInfo();
            obj.deserialize(params.UserInfo)
            this.UserInfo = obj;
        }
        this.ApiType = 'ApiType' in params ? params.ApiType : null;
        this.UserPrivilege = 'UserPrivilege' in params ? params.UserPrivilege : null;

    }
}

/**
 * DescribeBackUpTables request structure.
 * @class
 */
class DescribeBackUpTablesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * It is 0 by default. It is 1 when a one-time backup of the remote doris is performed. It is 2 when one-time COS recovery is performed.
         * @type {number || null}
         */
        this.BackupType = null;

        /**
         * Connection information of the remote doris cluster
         * @type {DorisSourceInfo || null}
         */
        this.DorisSourceInfo = null;

        /**
         * COS information
         * @type {CosSourceInfo || null}
         */
        this.CosSourceInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.BackupType = 'BackupType' in params ? params.BackupType : null;

        if (params.DorisSourceInfo) {
            let obj = new DorisSourceInfo();
            obj.deserialize(params.DorisSourceInfo)
            this.DorisSourceInfo = obj;
        }

        if (params.CosSourceInfo) {
            let obj = new CosSourceInfo();
            obj.deserialize(params.CosSourceInfo)
            this.CosSourceInfo = obj;
        }

    }
}

/**
 * Description of the region categories for availability zones
 * @class
 */
class RegionAreaInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region category information, such as south_china, east_china, etc.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description of the corresponding Name, such as South China, East China, etc.
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Specific region list 1
         * @type {Array.<RegionInfo> || null}
         */
        this.Regions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Desc = 'Desc' in params ? params.Desc : null;

        if (params.Regions) {
            this.Regions = new Array();
            for (let z in params.Regions) {
                let obj = new RegionInfo();
                obj.deserialize(params.Regions[z]);
                this.Regions.push(obj);
            }
        }

    }
}

/**
 * DescribeInstanceNodesRole request structure.
 * @class
 */
class DescribeInstanceNodesRoleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Filter IP addresses
         * @type {string || null}
         */
        this.IpFilter = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.IpFilter = 'IpFilter' in params ? params.IpFilter : null;

    }
}

/**
 * DescribeDatabaseAuditDownload response structure.
 * @class
 */
class DescribeDatabaseAuditDownloadResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The cos address of the log
         * @type {string || null}
         */
        this.CosUrl = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosUrl = 'CosUrl' in params ? params.CosUrl : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Node information list
 * @class
 */
class NodeInfos extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node name
         * @type {string || null}
         */
        this.NodeName = null;

        /**
         * Node status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Node IP
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Node role
         * @type {string || null}
         */
        this.NodeRole = null;

        /**
         * Component name
         * @type {string || null}
         */
        this.ComponentName = null;

        /**
         * Last restart time
         * @type {string || null}
         */
        this.LastRestartTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeName = 'NodeName' in params ? params.NodeName : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.NodeRole = 'NodeRole' in params ? params.NodeRole : null;
        this.ComponentName = 'ComponentName' in params ? params.ComponentName : null;
        this.LastRestartTime = 'LastRestartTime' in params ? params.LastRestartTime : null;

    }
}

/**
 * DescribeInstanceNodesInfo response structure.
 * @class
 */
class DescribeInstanceNodesInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Be node
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.BeNodes = null;

        /**
         * Fe node
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.FeNodes = null;

        /**
         * Fe master node
         * @type {string || null}
         */
        this.FeMaster = null;

        /**
         * Be node information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeInfo> || null}
         */
        this.BeNodeInfos = null;

        /**
         * Fe node information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeInfo> || null}
         */
        this.FeNodeInfos = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BeNodes = 'BeNodes' in params ? params.BeNodes : null;
        this.FeNodes = 'FeNodes' in params ? params.FeNodes : null;
        this.FeMaster = 'FeMaster' in params ? params.FeMaster : null;

        if (params.BeNodeInfos) {
            this.BeNodeInfos = new Array();
            for (let z in params.BeNodeInfos) {
                let obj = new NodeInfo();
                obj.deserialize(params.BeNodeInfos[z]);
                this.BeNodeInfos.push(obj);
            }
        }

        if (params.FeNodeInfos) {
            this.FeNodeInfos = new Array();
            for (let z in params.FeNodeInfos) {
                let obj = new NodeInfo();
                obj.deserialize(params.FeNodeInfos[z]);
                this.FeNodeInfos.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ScaleUpInstance response structure.
 * @class
 */
class ScaleUpInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process ID
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    UpdateDatabaseRequest: UpdateDatabaseRequest,
    DescribeInstanceUsedSubnetsResponse: DescribeInstanceUsedSubnetsResponse,
    DescribeInstanceNodesResponse: DescribeInstanceNodesResponse,
    DescribeClusterConfigsHistoryResponse: DescribeClusterConfigsHistoryResponse,
    DescribeInstanceOperationsRequest: DescribeInstanceOperationsRequest,
    DescribeClusterConfigsResponse: DescribeClusterConfigsResponse,
    ScaleOutInstanceResponse: ScaleOutInstanceResponse,
    ModifyNodeStatusResponse: ModifyNodeStatusResponse,
    ModifyUserPrivilegesV3Response: ModifyUserPrivilegesV3Response,
    UpdateTableSchemaResponse: UpdateTableSchemaResponse,
    ModifyUserPrivilegesV3Request: ModifyUserPrivilegesV3Request,
    DestroyInstanceRequest: DestroyInstanceRequest,
    BindUser: BindUser,
    CancelBackupJobRequest: CancelBackupJobRequest,
    ModifyWorkloadGroupRequest: ModifyWorkloadGroupRequest,
    UserWorkloadGroup: UserWorkloadGroup,
    DescribeSlowQueryRecordsDownloadResponse: DescribeSlowQueryRecordsDownloadResponse,
    DeleteWorkloadGroupRequest: DeleteWorkloadGroupRequest,
    WorkloadGroupConfig: WorkloadGroupConfig,
    DescribeInstanceOperationHistoryResponse: DescribeInstanceOperationHistoryResponse,
    InsertDatasToTableRequest: InsertDatasToTableRequest,
    InstanceDetail: InstanceDetail,
    ModifyDatabaseTableAccessRequest: ModifyDatabaseTableAccessRequest,
    DescribeInstancesResponse: DescribeInstancesResponse,
    CosSourceInfo: CosSourceInfo,
    ReduceInstanceResponse: ReduceInstanceResponse,
    ModifyCoolDownPolicyRequest: ModifyCoolDownPolicyRequest,
    DescribeBackUpTaskDetailRequest: DescribeBackUpTaskDetailRequest,
    RecoverBackUpJobRequest: RecoverBackUpJobRequest,
    DiskSpec: DiskSpec,
    DescribeInstanceOperationsResponse: DescribeInstanceOperationsResponse,
    DescribeUserBindWorkloadGroupResponse: DescribeUserBindWorkloadGroupResponse,
    CreateTablesDDL: CreateTablesDDL,
    ScaleOutInstanceRequest: ScaleOutInstanceRequest,
    UpdateUserPrivileges: UpdateUserPrivileges,
    ModifyClusterConfigsRequest: ModifyClusterConfigsRequest,
    DescribeQueryAnalyseRequest: DescribeQueryAnalyseRequest,
    DescribeInstanceStateRequest: DescribeInstanceStateRequest,
    NetworkInfo: NetworkInfo,
    ZoneInfo: ZoneInfo,
    DescribeAreaRegionResponse: DescribeAreaRegionResponse,
    DeleteBackUpDataRequest: DeleteBackUpDataRequest,
    ExecuteParametrizedQueryResponse: ExecuteParametrizedQueryResponse,
    CreateDatabaseRequest: CreateDatabaseRequest,
    ConfigKeyValue: ConfigKeyValue,
    Tag: Tag,
    ResizeDiskResponse: ResizeDiskResponse,
    OpenCoolDownRequest: OpenCoolDownRequest,
    DescribeCoolDownTableDataRequest: DescribeCoolDownTableDataRequest,
    CheckCoolDownWorkingVariableConfigCorrectResponse: CheckCoolDownWorkingVariableConfigCorrectResponse,
    ModifyInstanceResponse: ModifyInstanceResponse,
    DescribeSlowQueryRecordsDownloadRequest: DescribeSlowQueryRecordsDownloadRequest,
    DescribeRestoreTaskDetailResponse: DescribeRestoreTaskDetailResponse,
    DescribeUserPolicyResponse: DescribeUserPolicyResponse,
    ModifyNodeStatusRequest: ModifyNodeStatusRequest,
    DescribeCreateTablesDDLRequest: DescribeCreateTablesDDLRequest,
    RestartClusterForNodeResponse: RestartClusterForNodeResponse,
    UpdateTableSchemaRequest: UpdateTableSchemaRequest,
    CatalogPermission: CatalogPermission,
    CancelBackupJobResponse: CancelBackupJobResponse,
    DescribeAreaRegionRequest: DescribeAreaRegionRequest,
    SlowQueryRecord: SlowQueryRecord,
    DescribeInstanceNodesRequest: DescribeInstanceNodesRequest,
    ChargeProperties: ChargeProperties,
    DescribeWorkloadGroupRequest: DescribeWorkloadGroupRequest,
    DescribeCoolDownBackendsRequest: DescribeCoolDownBackendsRequest,
    CheckCoolDownWorkingVariableConfigCorrectRequest: CheckCoolDownWorkingVariableConfigCorrectRequest,
    InstanceOperation: InstanceOperation,
    BackupTableContent: BackupTableContent,
    CreateInstanceNewResponse: CreateInstanceNewResponse,
    DescribeSqlApisRequest: DescribeSqlApisRequest,
    ModifySecurityGroupsRequest: ModifySecurityGroupsRequest,
    PermissionHostInfo: PermissionHostInfo,
    CreateInstanceNewRequest: CreateInstanceNewRequest,
    DescribeDatabaseResponse: DescribeDatabaseResponse,
    UpdateCoolDownRequest: UpdateCoolDownRequest,
    Partition: Partition,
    CoolDownPolicyInfo: CoolDownPolicyInfo,
    OpenCoolDownPolicyRequest: OpenCoolDownPolicyRequest,
    RangeInfo: RangeInfo,
    DorisSourceInfo: DorisSourceInfo,
    OpenCoolDownResponse: OpenCoolDownResponse,
    AttachCBSSpec: AttachCBSSpec,
    DataBaseAuditRecord: DataBaseAuditRecord,
    CopyTableDatasResponse: CopyTableDatasResponse,
    ClusterConfigsHistory: ClusterConfigsHistory,
    InstanceConfigItem: InstanceConfigItem,
    Distribution: Distribution,
    AccountDetailInfo: AccountDetailInfo,
    CreateTableRequest: CreateTableRequest,
    Property: Property,
    TablePermissions: TablePermissions,
    CreateBackUpScheduleRequest: CreateBackUpScheduleRequest,
    DeleteTableRequest: DeleteTableRequest,
    ActionAlterUserResponse: ActionAlterUserResponse,
    BackupCosInfo: BackupCosInfo,
    DescribeClusterConfigsHistoryRequest: DescribeClusterConfigsHistoryRequest,
    DeleteTableResponse: DeleteTableResponse,
    CreateWorkloadGroupRequest: CreateWorkloadGroupRequest,
    DescribeInstanceNodesInfoRequest: DescribeInstanceNodesInfoRequest,
    DescribeInstancesHealthStateResponse: DescribeInstancesHealthStateResponse,
    DescribeDatabaseAuditDownloadRequest: DescribeDatabaseAuditDownloadRequest,
    DescribeInstanceNodesRoleResponse: DescribeInstanceNodesRoleResponse,
    ExecuteSelectQueryResponse: ExecuteSelectQueryResponse,
    DestroyInstanceResponse: DestroyInstanceResponse,
    QueryTableDataResponse: QueryTableDataResponse,
    ResizeDiskRequest: ResizeDiskRequest,
    CopyTableDatasRequest: CopyTableDatasRequest,
    DescribeSlowQueryRecordsResponse: DescribeSlowQueryRecordsResponse,
    ModifyWorkloadGroupStatusRequest: ModifyWorkloadGroupStatusRequest,
    DbInfo: DbInfo,
    CreateCoolDownPolicyRequest: CreateCoolDownPolicyRequest,
    DescribeSqlApisResponse: DescribeSqlApisResponse,
    DescribeCreateTablesDDLResponse: DescribeCreateTablesDDLResponse,
    ModifyInstanceRequest: ModifyInstanceRequest,
    DescribeSpecResponse: DescribeSpecResponse,
    ModifyInstanceKeyValConfigsResponse: ModifyInstanceKeyValConfigsResponse,
    QueryDetails: QueryDetails,
    DescribeBackUpSchedulesResponse: DescribeBackUpSchedulesResponse,
    TablesDDL: TablesDDL,
    DescribeBackUpTablesResponse: DescribeBackUpTablesResponse,
    DescribeDatabaseAuditRecordsResponse: DescribeDatabaseAuditRecordsResponse,
    InstanceNode: InstanceNode,
    ModifyCoolDownPolicyResponse: ModifyCoolDownPolicyResponse,
    DescribeInstancesHealthStateRequest: DescribeInstancesHealthStateRequest,
    NodeInfo: NodeInfo,
    FrontEndRule: FrontEndRule,
    RestartClusterForConfigsResponse: RestartClusterForConfigsResponse,
    InstanceInfo: InstanceInfo,
    DescribeSlowQueryRecordsRequest: DescribeSlowQueryRecordsRequest,
    CreateTableResponse: CreateTableResponse,
    DescribeUserBindWorkloadGroupRequest: DescribeUserBindWorkloadGroupRequest,
    ScaleUpInstanceRequest: ScaleUpInstanceRequest,
    Column: Column,
    DescribeBackUpSchedulesRequest: DescribeBackUpSchedulesRequest,
    DescribeClusterConfigsRequest: DescribeClusterConfigsRequest,
    ExecuteSelectQueryRequest: ExecuteSelectQueryRequest,
    CreateCoolDownPolicyResponse: CreateCoolDownPolicyResponse,
    ModifyWorkloadGroupResponse: ModifyWorkloadGroupResponse,
    DescribeRestoreTaskDetailRequest: DescribeRestoreTaskDetailRequest,
    CreateBackUpScheduleResponse: CreateBackUpScheduleResponse,
    ModifyDatabaseTableAccessResponse: ModifyDatabaseTableAccessResponse,
    DescribeInstanceResponse: DescribeInstanceResponse,
    DescribeBackUpJobResponse: DescribeBackUpJobResponse,
    DescribeDatabaseRequest: DescribeDatabaseRequest,
    RestartClusterForNodeRequest: RestartClusterForNodeRequest,
    UpdateCoolDownResponse: UpdateCoolDownResponse,
    BackupStatus: BackupStatus,
    SearchTags: SearchTags,
    UserInfo: UserInfo,
    DescribeInstanceUsedSubnetsRequest: DescribeInstanceUsedSubnetsRequest,
    ListInfo: ListInfo,
    QueryTableDataRequest: QueryTableDataRequest,
    DescribeDatabaseAuditRecordsRequest: DescribeDatabaseAuditRecordsRequest,
    DescribeUserPolicyRequest: DescribeUserPolicyRequest,
    DescribeBackUpJobDetailResponse: DescribeBackUpJobDetailResponse,
    DescribeBackUpJobDetailRequest: DescribeBackUpJobDetailRequest,
    DescribeCoolDownBackendsResponse: DescribeCoolDownBackendsResponse,
    DescribeCoolDownPoliciesResponse: DescribeCoolDownPoliciesResponse,
    DescribeTableListRequest: DescribeTableListRequest,
    DescribeWorkloadGroupResponse: DescribeWorkloadGroupResponse,
    CoolDownTableDataInfo: CoolDownTableDataInfo,
    ModifySecurityGroupsResponse: ModifySecurityGroupsResponse,
    DescribeTableRequest: DescribeTableRequest,
    DescribeSpecRequest: DescribeSpecRequest,
    CoolDownBackend: CoolDownBackend,
    DescribeBackUpTaskDetailResponse: DescribeBackUpTaskDetailResponse,
    DatabasePermissions: DatabasePermissions,
    ReduceInstanceRequest: ReduceInstanceRequest,
    InsertDatasToTableResponse: InsertDatasToTableResponse,
    DeleteWorkloadGroupResponse: DeleteWorkloadGroupResponse,
    UpdateDatabaseResponse: UpdateDatabaseResponse,
    DescribeInstanceOperationHistoryRequest: DescribeInstanceOperationHistoryRequest,
    DescribeCoolDownTableDataResponse: DescribeCoolDownTableDataResponse,
    DescribeQueryAnalyseResponse: DescribeQueryAnalyseResponse,
    IndexInfo: IndexInfo,
    ModifyWorkloadGroupStatusResponse: ModifyWorkloadGroupStatusResponse,
    OpenCoolDownPolicyResponse: OpenCoolDownPolicyResponse,
    ExecuteParametrizedQueryRequest: ExecuteParametrizedQueryRequest,
    ConfigSubmitContext: ConfigSubmitContext,
    DescribeInstancesRequest: DescribeInstancesRequest,
    RegionInfo: RegionInfo,
    Rows: Rows,
    RestartClusterForConfigsRequest: RestartClusterForConfigsRequest,
    CreateWorkloadGroupResponse: CreateWorkloadGroupResponse,
    DescribeInstanceStateResponse: DescribeInstanceStateResponse,
    CreateDatabaseResponse: CreateDatabaseResponse,
    PropertiesMap: PropertiesMap,
    DescribeCoolDownPoliciesRequest: DescribeCoolDownPoliciesRequest,
    ResourceSpec: ResourceSpec,
    ModifyClusterConfigsResponse: ModifyClusterConfigsResponse,
    RestoreStatus: RestoreStatus,
    DeleteBackUpDataResponse: DeleteBackUpDataResponse,
    ModifyInstanceKeyValConfigsRequest: ModifyInstanceKeyValConfigsRequest,
    BackUpJobDisplay: BackUpJobDisplay,
    ModifyUserBindWorkloadGroupResponse: ModifyUserBindWorkloadGroupResponse,
    ClusterConfigsInfoFromEMR: ClusterConfigsInfoFromEMR,
    RecoverBackUpJobResponse: RecoverBackUpJobResponse,
    DescribeTableResponse: DescribeTableResponse,
    DescribeTableListResponse: DescribeTableListResponse,
    ModifyUserBindWorkloadGroupRequest: ModifyUserBindWorkloadGroupRequest,
    NodesSummary: NodesSummary,
    CreateInstanceSpec: CreateInstanceSpec,
    DbTablesInfo: DbTablesInfo,
    DescribeInstanceRequest: DescribeInstanceRequest,
    DescribeBackUpJobRequest: DescribeBackUpJobRequest,
    ActionAlterUserRequest: ActionAlterUserRequest,
    DescribeBackUpTablesRequest: DescribeBackUpTablesRequest,
    RegionAreaInfo: RegionAreaInfo,
    DescribeInstanceNodesRoleRequest: DescribeInstanceNodesRoleRequest,
    DescribeDatabaseAuditDownloadResponse: DescribeDatabaseAuditDownloadResponse,
    NodeInfos: NodeInfos,
    DescribeInstanceNodesInfoResponse: DescribeInstanceNodesInfoResponse,
    ScaleUpInstanceResponse: ScaleUpInstanceResponse,

}
